mirror of
https://github.com/google/pebble.git
synced 2025-11-20 22:40:57 -05:00
Import of the watch repository from Pebble
This commit is contained in:
107
src/fw/applib/ui/selection_layer.h
Normal file
107
src/fw/applib/ui/selection_layer.h
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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 "click.h"
|
||||
#include "layer.h"
|
||||
#include "property_animation.h"
|
||||
#include "applib/fonts/fonts.h"
|
||||
|
||||
#define SELECTION_LAYER_DEFAULT_CELL_HEIGHT PBL_IF_RECT_ELSE(34, 40)
|
||||
|
||||
#define MAX_SELECTION_LAYER_CELLS 3
|
||||
|
||||
typedef char* (*SelectionLayerGetCellText)(unsigned index, void *callback_context);
|
||||
|
||||
typedef void (*SelectionLayerCompleteCallback)(void *callback_context);
|
||||
|
||||
typedef void (*SelectionLayerIncrementCallback)(unsigned selected_cell_idx, void *callback_context);
|
||||
|
||||
typedef void (*SelectionLayerDecrementCallback)(unsigned selected_cell_idx, void *callback_context);
|
||||
|
||||
typedef struct SelectionLayerCallbacks {
|
||||
SelectionLayerGetCellText get_cell_text;
|
||||
SelectionLayerCompleteCallback complete;
|
||||
SelectionLayerIncrementCallback increment;
|
||||
SelectionLayerDecrementCallback decrement;
|
||||
} SelectionLayerCallbacks;
|
||||
|
||||
|
||||
typedef struct SelectionLayer {
|
||||
Layer layer;
|
||||
unsigned num_cells;
|
||||
unsigned cell_widths[MAX_SELECTION_LAYER_CELLS];
|
||||
unsigned cell_padding;
|
||||
unsigned selected_cell_idx;
|
||||
|
||||
// If is_active = false the the selected cell will become invalid, and any clicks will be ignored
|
||||
bool is_active;
|
||||
|
||||
GFont font;
|
||||
GColor inactive_background_color;
|
||||
GColor active_background_color;
|
||||
|
||||
SelectionLayerCallbacks callbacks;
|
||||
void *callback_context;
|
||||
|
||||
// Animation stuff
|
||||
Animation *value_change_animation;
|
||||
bool bump_is_upwards;
|
||||
unsigned bump_text_anim_progress;
|
||||
AnimationImplementation bump_text_impl;
|
||||
unsigned bump_settle_anim_progress;
|
||||
AnimationImplementation bump_settle_anim_impl;
|
||||
|
||||
Animation *next_cell_animation;
|
||||
unsigned slide_amin_progress;
|
||||
AnimationImplementation slide_amin_impl;
|
||||
unsigned slide_settle_anim_progress;
|
||||
AnimationImplementation slide_settle_anim_impl;
|
||||
} SelectionLayer;
|
||||
|
||||
|
||||
|
||||
void selection_layer_init(SelectionLayer *selection_layer, const GRect *frame, unsigned num_cells);
|
||||
|
||||
SelectionLayer* selection_layer_create(GRect frame, unsigned num_cells);
|
||||
|
||||
void selection_layer_deinit(SelectionLayer* selection_layer);
|
||||
|
||||
void selection_layer_destroy(SelectionLayer* selection_layer);
|
||||
|
||||
void selection_layer_set_cell_width(SelectionLayer *selection_layer,
|
||||
unsigned cell_idx, unsigned width);
|
||||
|
||||
void selection_layer_set_font(SelectionLayer *selection_layer, GFont font);
|
||||
|
||||
void selection_layer_set_inactive_bg_color(SelectionLayer *selection_layer, GColor color);
|
||||
|
||||
void selection_layer_set_active_bg_color(SelectionLayer *selection_layer, GColor color);
|
||||
|
||||
void selection_layer_set_cell_padding(SelectionLayer *selection_layer, unsigned padding);
|
||||
|
||||
// When transitioning from inactive -> active, the selected cell will be index 0
|
||||
void selection_layer_set_active(SelectionLayer *selection_layer, bool is_active);
|
||||
|
||||
void selection_layer_set_click_config_onto_window(SelectionLayer *selection_layer,
|
||||
struct Window *window);
|
||||
|
||||
void selection_layer_set_callbacks(SelectionLayer *selection_layer,
|
||||
void *callback_context,
|
||||
SelectionLayerCallbacks callbacks);
|
||||
|
||||
int selection_layer_default_cell_height(void);
|
||||
Reference in New Issue
Block a user