| /****************************************************************************** | |
| *(C) Copyright 2014 Marvell International Ltd. | |
| * All Rights Reserved | |
| ******************************************************************************/ | |
| /******************************************************************************* | |
| * | |
| * Filename: Button.c | |
| * | |
| * Authors: Boaz Sommer | |
| * | |
| * Description: A Button class | |
| * | |
| * HISTORY: | |
| * | |
| * | |
| * | |
| * Notes: | |
| * | |
| ******************************************************************************/ | |
| #include <stdarg.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <pthread.h> | |
| #include <errno.h> | |
| #include <signal.h> | |
| #include <math.h> | |
| #include "Image.h" | |
| #include "Button.h" | |
| #include "TextBox.h" | |
| #include "mgui_config.h" | |
| #include "mgui_utils.h" | |
| typedef struct S_BUTTON_PRIV | |
| { | |
| void *dfb; | |
| IMAGE buttonImage; | |
| TEXTBOX *text; | |
| OBJECT_RECT buttonRect; | |
| pthread_t buttonThreadHandle; | |
| long eventHandle; | |
| }BUTTON_PRIV; | |
| #if 0 | |
| static void _ButtonEventHandler (int event, void *params) | |
| { | |
| ButtonOnClickParams *onClick = (ButtonOnClickParams *)params; | |
| MGUI_DMSG("Button is clicked\n"); | |
| if (onClick && onClick->cb) | |
| onClick->cb(event, onClick->cb_data); | |
| } | |
| #endif | |
| void ButtonSetFromArray(BUTTON *pt, int key) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) { | |
| ImageSetFromArray(button->buttonImage, key); | |
| ImageGetGeometry(button->buttonImage, &button->buttonRect); | |
| } | |
| } | |
| void ButtonSetArray(BUTTON *pt, const IMAGE_ARRAY_ITEM *array, int size) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) { | |
| ImageSetArray(button->buttonImage, array, size); | |
| } | |
| } | |
| BUTTON *ButtonInit (void *dfb) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)calloc(1, sizeof(*button)); | |
| if (button) | |
| { | |
| button->dfb = dfb; | |
| GuiAddObject(button->dfb, button, (ObjectDrawFunc)ButtonDraw); | |
| button->buttonImage = ImageInit(dfb); | |
| } | |
| return (BUTTON *)button; | |
| } | |
| void ButtonDeinit (BUTTON *pt) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| { | |
| #if 0 | |
| if (button->eventHandle) | |
| DirectFbUnregisterEventHandler(button->dfb, button->eventHandle); | |
| #endif | |
| if (button->text) | |
| TextBoxDeinit(button->text); | |
| ImageDeinit(button->buttonImage); | |
| GuiRemoveObject(button->dfb, button); | |
| free (button); | |
| } | |
| } | |
| void ButtonSetup2(BUTTON *pt, OBJECT_RECT rect) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) { | |
| button->buttonRect = rect; | |
| ImageSetup2(button->buttonImage, button->buttonRect); | |
| } | |
| } | |
| void ButtonSetup (BUTTON *pt, int lx, int ly) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| { | |
| button->buttonRect.lx = lx; | |
| button->buttonRect.ly = ly; | |
| /* | |
| button->buttonRect.w = w; | |
| button->buttonRect.lx = h; | |
| */ | |
| MGUI_DMSG("Button rect: (x,y,w,h) = (%d,%d,%d,%d)\n", lx, ly, button->buttonRect.w, button->buttonRect.h); | |
| ImageSetup(button->buttonImage, | |
| button->buttonRect.lx, | |
| button->buttonRect.ly, | |
| button->buttonRect.w, | |
| button->buttonRect.h); | |
| } | |
| } | |
| void ButtonDraw (BUTTON *pt) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| { | |
| //ImageDraw(button->buttonImage); | |
| if (button->text) | |
| TextBoxDraw(button->text); | |
| } | |
| else | |
| MGUI_DMSG("invalid button\n"); | |
| } | |
| void ButtonSetupOnClick(BUTTON *pt, ButtonOnClickParams *onClick) | |
| { | |
| #if 1 | |
| UNUSED(pt); | |
| UNUSED(onClick); | |
| #else | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| unsigned long mask = EVENT_SET(DIRECTFB_EVT_PRESS) | EVENT_SET(DIRECTFB_EVT_RELEASE); | |
| if (button) | |
| { | |
| button->eventHandle = DirectFbRegisterEventHandler(button->dfb, | |
| &button->buttonRect, | |
| mask , | |
| _ButtonEventHandler, | |
| (void *)onClick); | |
| } | |
| #endif | |
| } | |
| void ButtonGetGeometry (BUTTON pt, OBJECT_RECT *rect) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| { | |
| ImageGetGeometry(button->buttonImage, rect); | |
| } | |
| } | |
| int ButtonGetWidth (BUTTON *pt) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| return (button->buttonRect.w); | |
| else | |
| return 0; | |
| } | |
| int ButtonGetHeight (BUTTON *pt) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| if (button) | |
| return (button->buttonRect.h); | |
| else | |
| return 0; | |
| } | |
| void ButtonSetText (BUTTON *pt, const char *text, const char *font_path) | |
| { | |
| BUTTON_PRIV *button = (BUTTON_PRIV *)pt; | |
| int height; | |
| if (button) | |
| { | |
| height = button->buttonRect.h *.45; | |
| button->text = TextBoxInit(button->dfb, height, -1, font_path); | |
| TextBoxSetup(button->text, text, button->buttonRect.lx + button->buttonRect.w/2, | |
| button->buttonRect.ly + (button->buttonRect.h * 1.5 / 2), TA_CENTER, COLOR_BLACK); | |
| } | |
| } |