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
Application/ImageButton.cpp@22:f0d00f29bfeb, 2019-11-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |