wlmaker
Loading...
Searching...
No Matches
Classes | Functions | Variables
menu_item.c File Reference
#include "menu_item.h"
#include <cairo.h>
#include <inttypes.h>
#include <libbase/libbase.h>
#include <linux/input-event-codes.h>
#include <stdlib.h>
#include "buffer.h"
#include "gfxbuf.h"
#include "input.h"
#include "pane.h"
#include "primitives.h"
#include "util.h"
Include dependency graph for menu_item.c:

Classes

struct  _wlmtk_menu_item_t
 

Functions

static bool _wlmtk_menu_item_redraw (wlmtk_menu_item_t *menu_item_ptr)
 
static void _wlmtk_menu_item_set_state (wlmtk_menu_item_t *menu_item_ptr, wlmtk_menu_item_state_t state)
 
static void _wlmtk_menu_item_draw_state (wlmtk_menu_item_t *menu_item_ptr)
 
static struct wlr_buffer * _wlmtk_menu_item_create_buffer (wlmtk_menu_item_t *menu_item_ptr, wlmtk_menu_item_state_t state)
 
static bool _wlmtk_menu_item_element_pointer_motion (wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
 
static bool _wlmtk_menu_item_element_pointer_button (wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
 
static void _wlmtk_menu_item_element_destroy (wlmtk_element_t *element_ptr)
 
static void _wlmtk_menu_item_handle_pointer_enter (struct wl_listener *listener_ptr, void *data_ptr)
 
static void _wlmtk_menu_item_handle_pointer_leave (struct wl_listener *listener_ptr, void *data_ptr)
 
static void _wlmtk_menu_item_handle_open_changed (struct wl_listener *listener_ptr, void *data_ptr)
 
wlmtk_menu_item_twlmtk_menu_item_create (const wlmtk_menu_item_style_t *style_ptr)
 
void wlmtk_menu_item_destroy (wlmtk_menu_item_t *menu_item_ptr)
 
wlmtk_menu_item_events_twlmtk_menu_item_events (wlmtk_menu_item_t *menu_item_ptr)
 
void wlmtk_menu_item_set_parent_menu (wlmtk_menu_item_t *menu_item_ptr, wlmtk_menu_t *menu_ptr)
 
void wlmtk_menu_item_set_submenu (wlmtk_menu_item_t *menu_item_ptr, wlmtk_menu_t *submenu_ptr)
 
void wlmtk_menu_item_set_mode (wlmtk_menu_item_t *menu_item_ptr, enum wlmtk_menu_mode mode)
 
enum wlmtk_menu_mode wlmtk_menu_item_get_mode (wlmtk_menu_item_t *menu_item_ptr)
 
wlmtk_menu_item_state_t wlmtk_menu_item_get_state (wlmtk_menu_item_t *menu_item_ptr)
 
bool wlmtk_menu_item_set_text (wlmtk_menu_item_t *menu_item_ptr, const char *text_ptr)
 
void wlmtk_menu_item_set_enabled (wlmtk_menu_item_t *menu_item_ptr, bool enabled)
 
bool wlmtk_menu_item_set_highlighted (wlmtk_menu_item_t *menu_item_ptr, bool highlighted)
 
bs_dllist_node_t * wlmtk_dlnode_from_menu_item (wlmtk_menu_item_t *menu_item_ptr)
 
wlmtk_menu_item_twlmtk_menu_item_from_dlnode (bs_dllist_node_t *dlnode_ptr)
 
wlmtk_element_twlmtk_menu_item_element (wlmtk_menu_item_t *menu_item_ptr)
 
static void test_create_destroy (bs_test_t *test_ptr)
 
static void test_buffers (bs_test_t *test_ptr)
 
static void test_pointer (bs_test_t *test_ptr)
 
static void test_triggered (bs_test_t *test_ptr)
 
static void test_right_click (bs_test_t *test_ptr)
 
static void test_submenu_highlight (bs_test_t *test_ptr)
 

Variables

static const wlmtk_element_vmt_t _wlmtk_menu_item_element_vmt
 
static const wlmtk_menu_item_style_t _item_test_style
 
const bs_test_case_t wlmtk_menu_item_test_cases []
 

Detailed Description

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.

Function Documentation

◆ _wlmtk_menu_item_create_buffer()

struct wlr_buffer * _wlmtk_menu_item_create_buffer ( wlmtk_menu_item_t menu_item_ptr,
wlmtk_menu_item_state_t  state 
)
static

Creates a wlr_buffer with the menu item drawn for the given state.

Parameters
menu_item_ptr
state
Returns
A wlr_buffer, or NULL on error.

◆ _wlmtk_menu_item_draw_state()

void _wlmtk_menu_item_draw_state ( wlmtk_menu_item_t menu_item_ptr)
static

Applies the state: Sets the parent buffer's content accordingly.

◆ _wlmtk_menu_item_element_destroy()

void _wlmtk_menu_item_element_destroy ( wlmtk_element_t element_ptr)
static

Implements wlmtk_element_vmt_t::destroy. Dtor for the menu item.

◆ _wlmtk_menu_item_element_pointer_button()

bool _wlmtk_menu_item_element_pointer_button ( wlmtk_element_t element_ptr,
const wlmtk_button_event_t button_event_ptr 
)
static

Checks if the button event is a click, and calls the handler.

◆ _wlmtk_menu_item_element_pointer_motion()

bool _wlmtk_menu_item_element_pointer_motion ( wlmtk_element_t element_ptr,
wlmtk_pointer_motion_event_t motion_event_ptr 
)
static

Requests this item to be highlighted if there's motion.

◆ _wlmtk_menu_item_handle_open_changed()

void _wlmtk_menu_item_handle_open_changed ( struct wl_listener *  listener_ptr,
void *  data_ptr 
)
static

Handles wlmtk_menu_events_t::open_changed. Updates item highlight.

◆ _wlmtk_menu_item_handle_pointer_enter()

void _wlmtk_menu_item_handle_pointer_enter ( struct wl_listener *  listener_ptr,
void *  data_ptr 
)
static

Handles when the pointer enters the element: Highlights, if enabled.

◆ _wlmtk_menu_item_handle_pointer_leave()

void _wlmtk_menu_item_handle_pointer_leave ( struct wl_listener *  listener_ptr,
void *  data_ptr 
)
static

Handles when the pointer leaves the element: Ends highlight, in case there is no submenu currently visible.

Parameters
listener_ptr
data_ptr

◆ _wlmtk_menu_item_redraw()

bool _wlmtk_menu_item_redraw ( wlmtk_menu_item_t menu_item_ptr)
static

Redraws the buffers for the menu item. Also updates the buffer state.

◆ _wlmtk_menu_item_set_state()

void _wlmtk_menu_item_set_state ( wlmtk_menu_item_t menu_item_ptr,
wlmtk_menu_item_state_t  state 
)
static

Sets menu state: Sets the parent buffer's content accordingly.

◆ test_buffers()

void test_buffers ( bs_test_t *  test_ptr)
static

Exercises drawing.

◆ test_create_destroy()

void test_create_destroy ( bs_test_t *  test_ptr)
static

Exercises setup and teardown and a few accessors.

◆ test_pointer()

void test_pointer ( bs_test_t *  test_ptr)
static

Tests pointer entering & leaving.

◆ test_right_click()

void test_right_click ( bs_test_t *  test_ptr)
static

Tests button events in right-click mode.

◆ test_submenu_highlight()

void test_submenu_highlight ( bs_test_t *  test_ptr)
static

Tests the interaction of submenu and menu item highlighting.

We want the following:

  • when the item with submenu highlights, the submenu opens.
  • move the cursor onto submenu, check it highlights.
  • if highlighting is turned off, the item closes the submenu.
Parameters
test_ptr

◆ test_triggered()

void test_triggered ( bs_test_t *  test_ptr)
static

Verifies desired clicks are passed to the handler.

◆ wlmtk_dlnode_from_menu_item()

bs_dllist_node_t * wlmtk_dlnode_from_menu_item ( wlmtk_menu_item_t menu_item_ptr)

Returns pointer to wlmtk_menu_item_t::dlnode.

◆ wlmtk_menu_item_create()

wlmtk_menu_item_t * wlmtk_menu_item_create ( const wlmtk_menu_item_style_t style_ptr)

Creates a menu item.

Note: Menu items are created as 'visible' elements.

Parameters
style_ptr
Returns
Pointer to the menu item state, or NULL on failure.

◆ wlmtk_menu_item_destroy()

void wlmtk_menu_item_destroy ( wlmtk_menu_item_t menu_item_ptr)

Destroys the menu item.

Parameters
menu_item_ptr

◆ wlmtk_menu_item_element()

wlmtk_element_t * wlmtk_menu_item_element ( wlmtk_menu_item_t menu_item_ptr)

Returns a pointer to the superclass wlmtk_element_t.

◆ wlmtk_menu_item_events()

wlmtk_menu_item_events_t * wlmtk_menu_item_events ( wlmtk_menu_item_t menu_item_ptr)

Returns pointer to the menu item's wlmtk_menu_item_t::events.

◆ wlmtk_menu_item_from_dlnode()

wlmtk_menu_item_t * wlmtk_menu_item_from_dlnode ( bs_dllist_node_t *  dlnode_ptr)

Returns the base wlmtk_menu_item_t from dlnode_ptr.

◆ wlmtk_menu_item_get_mode()

enum wlmtk_menu_mode wlmtk_menu_item_get_mode ( wlmtk_menu_item_t menu_item_ptr)
Returns
the mode of this item.

◆ wlmtk_menu_item_get_state()

wlmtk_menu_item_state_t wlmtk_menu_item_get_state ( wlmtk_menu_item_t menu_item_ptr)
Returns
The state of the item, wlmtk_menu_item_t::state.

◆ wlmtk_menu_item_set_enabled()

void wlmtk_menu_item_set_enabled ( wlmtk_menu_item_t menu_item_ptr,
bool  enabled 
)

Sets whether the menu item is enabled or disabled.

Parameters
menu_item_ptr
enabled

◆ wlmtk_menu_item_set_highlighted()

bool wlmtk_menu_item_set_highlighted ( wlmtk_menu_item_t menu_item_ptr,
bool  highlighted 
)

Sets the menu item as highlighted.

Parameters
menu_item_ptr
highlighted
Returns
false if the menu was not enabled, ie. could not be highlighted.

◆ wlmtk_menu_item_set_mode()

void wlmtk_menu_item_set_mode ( wlmtk_menu_item_t menu_item_ptr,
enum wlmtk_menu_mode  mode 
)

Sets the menu's mode for this item.

Parameters
menu_item_ptr
mode

◆ wlmtk_menu_item_set_parent_menu()

void wlmtk_menu_item_set_parent_menu ( wlmtk_menu_item_t menu_item_ptr,
wlmtk_menu_t menu_ptr 
)

Sets the menu this item belongs to.

Private: Should only be called by wlmtk_menu_add_item.

Parameters
menu_item_ptr
menu_ptrMay be NULL, to detach from menu.

◆ wlmtk_menu_item_set_submenu()

void wlmtk_menu_item_set_submenu ( wlmtk_menu_item_t menu_item_ptr,
wlmtk_menu_t submenu_ptr 
)

Sets the submenu for this menu item.

Parameters
menu_item_ptr
submenu_ptrThe submenu to set for the item. The item will take ownership of submenu_ptr, and destroy it when the item ist destroyed. Unless the submenu is detached again, by calling with a NULL argument.

◆ wlmtk_menu_item_set_text()

bool wlmtk_menu_item_set_text ( wlmtk_menu_item_t menu_item_ptr,
const char *  text_ptr 
)

Sets or updates the text for the menu item.

Parameters
menu_item_ptr
text_ptr

Variable Documentation

◆ _item_test_style

const wlmtk_menu_item_style_t _item_test_style
static
Initial value:
= {
.fill = {
.param = { .dgradient = { .from = 0xff102040, .to = 0xff4080ff }}
},
.highlighted_fill = {
.param = { .solid = { .color = 0xffc0d0e0 } }
},
.font = { .face = "Helvetica", .size = 14 },
.height = 24,
.bezel_width = 1,
.width = 200,
.enabled_text_color = 0xfff0f060,
.highlighted_text_color = 0xff204080,
.disabled_text_color = 0xff807060,
}
@ WLMTK_STYLE_COLOR_SOLID
Definition style.h:33
@ WLMTK_STYLE_COLOR_DGRADIENT
Definition style.h:45

Style definition used for unit tests.

◆ _wlmtk_menu_item_element_vmt

const wlmtk_element_vmt_t _wlmtk_menu_item_element_vmt
static
Initial value:
= {
}
static void _wlmtk_menu_item_element_destroy(wlmtk_element_t *element_ptr)
Definition menu_item.c:582
static bool _wlmtk_menu_item_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition menu_item.c:549
static bool _wlmtk_menu_item_element_pointer_motion(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition menu_item.c:529

Virtual method table for the menu item's super class: Element.

◆ wlmtk_menu_item_test_cases

const bs_test_case_t wlmtk_menu_item_test_cases[]
Initial value:
= {
{ 1, "create_destroy", test_create_destroy },
{ 0, "buffers", test_buffers },
{ 1, "pointer", test_pointer },
{ 1, "triggered", test_triggered },
{ 1, "right_click", test_right_click },
{ 1, "submenu_highlight", test_submenu_highlight },
{ 0, NULL, NULL }
}
static void test_create_destroy(bs_test_t *test_ptr)
Definition menu_item.c:673
static void test_triggered(bs_test_t *test_ptr)
Definition menu_item.c:813
static void test_right_click(bs_test_t *test_ptr)
Definition menu_item.c:874
static void test_buffers(bs_test_t *test_ptr)
Definition menu_item.c:698
static void test_pointer(bs_test_t *test_ptr)
Definition menu_item.c:726
static void test_submenu_highlight(bs_test_t *test_ptr)
Definition menu_item.c:942

Unit test cases.