A basic graphics package for the LPC4088 Display Module.

Dependents:   lpc4088_displaymodule_demo_sphere sampleGUI sampleEmptyGUI lpc4088_displaymodule_fs_aid ... more

Fork of DMBasicGUI by EmbeddedArtists AB

Committer:
embeddedartists
Date:
Mon Nov 04 14:31:50 2019 +0000
Revision:
22:f0d00f29bfeb
Parent:
17:6e2abf107800
More updates related to mbed OS 5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 2:efae611de184 1 /*
embeddedartists 2:efae611de184 2 * Copyright 2014 Embedded Artists AB
embeddedartists 2:efae611de184 3 *
embeddedartists 2:efae611de184 4 * Licensed under the Apache License, Version 2.0 (the "License");
embeddedartists 2:efae611de184 5 * you may not use this file except in compliance with the License.
embeddedartists 2:efae611de184 6 * You may obtain a copy of the License at
embeddedartists 2:efae611de184 7 *
embeddedartists 2:efae611de184 8 * http://www.apache.org/licenses/LICENSE-2.0
embeddedartists 2:efae611de184 9 *
embeddedartists 2:efae611de184 10 * Unless required by applicable law or agreed to in writing, software
embeddedartists 2:efae611de184 11 * distributed under the License is distributed on an "AS IS" BASIS,
embeddedartists 2:efae611de184 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
embeddedartists 2:efae611de184 13 * See the License for the specific language governing permissions and
embeddedartists 2:efae611de184 14 * limitations under the License.
embeddedartists 2:efae611de184 15 */
embeddedartists 2:efae611de184 16
embeddedartists 2:efae611de184 17 #include "ImageButton.h"
embeddedartists 2:efae611de184 18 #include "mbed.h"
embeddedartists 2:efae611de184 19 #include "DMBoard.h"
embeddedartists 2:efae611de184 20
embeddedartists 2:efae611de184 21 #include "lpc_swim_image.h"
embeddedartists 11:265884fa7fdd 22 #include "lpc_swim_font.h"
embeddedartists 11:265884fa7fdd 23 #include "lpc_colors.h"
embeddedartists 2:efae611de184 24
embeddedartists 11:265884fa7fdd 25 ImageButton::ImageButton(COLOR_T* fb, uint16_t x, uint16_t y, uint16_t width, uint16_t height,
embeddedartists 11:265884fa7fdd 26 const char* caption, COLOR_T color) :
embeddedartists 11:265884fa7fdd 27 Clickable(fb, x, y, width, height+(caption==NULL?0:20))
embeddedartists 2:efae611de184 28 {
embeddedartists 9:ce69a7adfe9c 29 _imgUp.pointerToFree = NULL;
embeddedartists 2:efae611de184 30 _imgUp.pixels = NULL;
embeddedartists 9:ce69a7adfe9c 31 _imgDown.pointerToFree = NULL;
embeddedartists 2:efae611de184 32 _imgDown.pixels = NULL;
embeddedartists 11:265884fa7fdd 33 _caption = NULL;
embeddedartists 11:265884fa7fdd 34 _transparent = false;
embeddedartists 11:265884fa7fdd 35
embeddedartists 11:265884fa7fdd 36 if (caption != NULL) {
embeddedartists 11:265884fa7fdd 37 _caption = (char*)malloc(strlen(caption)+1);
embeddedartists 11:265884fa7fdd 38 if (_caption != NULL) {
embeddedartists 11:265884fa7fdd 39 strcpy(_caption, caption);
embeddedartists 11:265884fa7fdd 40 }
embeddedartists 11:265884fa7fdd 41 _captionColor = color;
embeddedartists 11:265884fa7fdd 42 }
embeddedartists 2:efae611de184 43 }
embeddedartists 2:efae611de184 44
embeddedartists 2:efae611de184 45 ImageButton::~ImageButton()
embeddedartists 2:efae611de184 46 {
embeddedartists 9:ce69a7adfe9c 47 if (_imgUp.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 48 free(_imgUp.pointerToFree);
embeddedartists 9:ce69a7adfe9c 49 _imgUp.pointerToFree = NULL;
embeddedartists 2:efae611de184 50 }
embeddedartists 9:ce69a7adfe9c 51 if (_imgDown.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 52 free(_imgDown.pointerToFree);
embeddedartists 9:ce69a7adfe9c 53 _imgDown.pointerToFree = NULL;
embeddedartists 2:efae611de184 54 }
embeddedartists 11:265884fa7fdd 55 if (_caption != NULL) {
embeddedartists 11:265884fa7fdd 56 free(_caption);
embeddedartists 11:265884fa7fdd 57 _caption = NULL;
embeddedartists 11:265884fa7fdd 58 }
embeddedartists 2:efae611de184 59 }
embeddedartists 2:efae611de184 60
embeddedartists 3:3fabfe3339b8 61 bool ImageButton::loadImages(const char* imgUp, const char* imgDown)
embeddedartists 3:3fabfe3339b8 62 {
embeddedartists 9:ce69a7adfe9c 63 if (_imgUp.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 64 free(_imgUp.pointerToFree);
embeddedartists 9:ce69a7adfe9c 65 _imgUp.pointerToFree = NULL;
embeddedartists 3:3fabfe3339b8 66 }
embeddedartists 9:ce69a7adfe9c 67 if (_imgDown.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 68 free(_imgDown.pointerToFree);
embeddedartists 9:ce69a7adfe9c 69 _imgDown.pointerToFree = NULL;
embeddedartists 3:3fabfe3339b8 70 }
embeddedartists 3:3fabfe3339b8 71 if (Image::decode(imgUp, Image::RES_16BIT, &_imgUp) != 0) {
embeddedartists 3:3fabfe3339b8 72 DMBoard::instance().logger()->printf("Failed to load %s\n", imgUp);
embeddedartists 3:3fabfe3339b8 73 return false;
embeddedartists 3:3fabfe3339b8 74 }
embeddedartists 3:3fabfe3339b8 75 if (imgDown != NULL) {
embeddedartists 3:3fabfe3339b8 76 if (Image::decode(imgDown, Image::RES_16BIT, &_imgDown) == 0) {
embeddedartists 3:3fabfe3339b8 77 DMBoard::instance().logger()->printf("Failed to load %s\n", imgDown);
embeddedartists 3:3fabfe3339b8 78 return false;
embeddedartists 3:3fabfe3339b8 79 }
embeddedartists 3:3fabfe3339b8 80 }
embeddedartists 3:3fabfe3339b8 81 return true;
embeddedartists 3:3fabfe3339b8 82 }
embeddedartists 3:3fabfe3339b8 83
embeddedartists 4:a73760d09423 84 bool ImageButton::loadImages(const unsigned char* imgUp, unsigned int imgUpSize,
embeddedartists 4:a73760d09423 85 const unsigned char* imgDown, unsigned int imgDownSize)
embeddedartists 4:a73760d09423 86 {
embeddedartists 9:ce69a7adfe9c 87 if (_imgUp.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 88 free(_imgUp.pointerToFree);
embeddedartists 9:ce69a7adfe9c 89 _imgUp.pointerToFree = NULL;
embeddedartists 4:a73760d09423 90 }
embeddedartists 9:ce69a7adfe9c 91 if (_imgDown.pointerToFree != NULL) {
embeddedartists 9:ce69a7adfe9c 92 free(_imgDown.pointerToFree);
embeddedartists 9:ce69a7adfe9c 93 _imgDown.pointerToFree = NULL;
embeddedartists 4:a73760d09423 94 }
embeddedartists 4:a73760d09423 95 if (Image::decode(imgUp, imgUpSize, Image::RES_16BIT, &_imgUp) != 0) {
embeddedartists 4:a73760d09423 96 DMBoard::instance().logger()->printf("Failed to load %s\n", imgUp);
embeddedartists 4:a73760d09423 97 return false;
embeddedartists 4:a73760d09423 98 }
embeddedartists 4:a73760d09423 99 if (imgDown != NULL) {
embeddedartists 4:a73760d09423 100 if (Image::decode(imgDown, imgDownSize, Image::RES_16BIT, &_imgDown) == 0) {
embeddedartists 4:a73760d09423 101 DMBoard::instance().logger()->printf("Failed to load %s\n", imgDown);
embeddedartists 4:a73760d09423 102 return false;
embeddedartists 4:a73760d09423 103 }
embeddedartists 4:a73760d09423 104 }
embeddedartists 4:a73760d09423 105 return true;
embeddedartists 4:a73760d09423 106 }
embeddedartists 4:a73760d09423 107
embeddedartists 17:6e2abf107800 108 bool ImageButton::loadImages(Resource* resImgUp, Resource* resImgDown)
embeddedartists 17:6e2abf107800 109 {
embeddedartists 17:6e2abf107800 110 if (_imgUp.pointerToFree != NULL) {
embeddedartists 17:6e2abf107800 111 free(_imgUp.pointerToFree);
embeddedartists 17:6e2abf107800 112 _imgUp.pointerToFree = NULL;
embeddedartists 17:6e2abf107800 113 }
embeddedartists 17:6e2abf107800 114 if (_imgDown.pointerToFree != NULL) {
embeddedartists 17:6e2abf107800 115 free(_imgDown.pointerToFree);
embeddedartists 17:6e2abf107800 116 _imgDown.pointerToFree = NULL;
embeddedartists 17:6e2abf107800 117 }
embeddedartists 17:6e2abf107800 118 if (Image::decode(resImgUp, Image::RES_16BIT, &_imgUp) != 0) {
embeddedartists 17:6e2abf107800 119 DMBoard::instance().logger()->printf("Failed to load \"up\" image\n");
embeddedartists 17:6e2abf107800 120 return false;
embeddedartists 17:6e2abf107800 121 }
embeddedartists 17:6e2abf107800 122 if (resImgDown != NULL) {
embeddedartists 17:6e2abf107800 123 if (Image::decode(resImgDown, Image::RES_16BIT, &_imgDown) == 0) {
embeddedartists 17:6e2abf107800 124 DMBoard::instance().logger()->printf("Failed to load \"down\" image\n");
embeddedartists 17:6e2abf107800 125 return false;
embeddedartists 17:6e2abf107800 126 }
embeddedartists 17:6e2abf107800 127 }
embeddedartists 17:6e2abf107800 128 return true;
embeddedartists 17:6e2abf107800 129 }
embeddedartists 17:6e2abf107800 130
embeddedartists 17:6e2abf107800 131
embeddedartists 11:265884fa7fdd 132 void ImageButton::setTransparency(COLOR_T tColor)
embeddedartists 11:265884fa7fdd 133 {
embeddedartists 11:265884fa7fdd 134 _transparent = true;
embeddedartists 11:265884fa7fdd 135 _transparentColor = tColor;
embeddedartists 11:265884fa7fdd 136 }
embeddedartists 4:a73760d09423 137
embeddedartists 6:7917b0894655 138 void ImageButton::draw(COLOR_T* fb)
embeddedartists 2:efae611de184 139 {
embeddedartists 6:7917b0894655 140 if (fb != NULL) {
embeddedartists 6:7917b0894655 141 _win.fb = fb;
embeddedartists 6:7917b0894655 142 }
embeddedartists 11:265884fa7fdd 143 if (_caption != NULL) {
embeddedartists 11:265884fa7fdd 144 _win.pen = _captionColor;
embeddedartists 11:265884fa7fdd 145 swim_put_text_centered_win(&_win, _caption, _imgUp.height+2);
embeddedartists 11:265884fa7fdd 146 }
embeddedartists 2:efae611de184 147 if (_pressed) {
embeddedartists 2:efae611de184 148 if (_imgDown.pixels != NULL) {
embeddedartists 11:265884fa7fdd 149 if (_transparent) {
embeddedartists 11:265884fa7fdd 150 swim_put_transparent_image_xy(&_win, _imgDown.pixels, _imgDown.width, _imgDown.height, 0, 0, _transparentColor);
embeddedartists 11:265884fa7fdd 151 } else {
embeddedartists 11:265884fa7fdd 152 swim_put_image(&_win, _imgDown.pixels, _imgDown.width, _imgDown.height);
embeddedartists 11:265884fa7fdd 153 }
embeddedartists 2:efae611de184 154 }
embeddedartists 2:efae611de184 155 } else {
embeddedartists 3:3fabfe3339b8 156 if (_imgUp.pixels != NULL) {
embeddedartists 11:265884fa7fdd 157 if (_transparent) {
embeddedartists 11:265884fa7fdd 158 swim_put_transparent_image_xy(&_win, _imgUp.pixels, _imgUp.width, _imgUp.height, 0, 0, _transparentColor);
embeddedartists 11:265884fa7fdd 159 } else {
embeddedartists 11:265884fa7fdd 160 swim_put_image(&_win, _imgUp.pixels, _imgUp.width, _imgUp.height);
embeddedartists 11:265884fa7fdd 161 }
embeddedartists 3:3fabfe3339b8 162 }
embeddedartists 2:efae611de184 163 }
embeddedartists 2:efae611de184 164 }