Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of DMBasicGUI by
ImageButton.cpp
00001 /* 00002 * Copyright 2014 Embedded Artists AB 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #include "ImageButton.h" 00018 #include "mbed.h" 00019 #include "DMBoard.h" 00020 00021 #include "lpc_swim_image.h" 00022 #include "lpc_swim_font.h" 00023 #include "lpc_colors.h" 00024 00025 ImageButton::ImageButton(COLOR_T* fb, uint16_t x, uint16_t y, uint16_t width, uint16_t height, 00026 const char* caption, COLOR_T color) : 00027 Clickable(fb, x, y, width, height+(caption==NULL?0:20)) 00028 { 00029 _imgUp.pointerToFree = NULL; 00030 _imgUp.pixels = NULL; 00031 _imgDown.pointerToFree = NULL; 00032 _imgDown.pixels = NULL; 00033 _caption = NULL; 00034 _transparent = false; 00035 00036 if (caption != NULL) { 00037 _caption = (char*)malloc(strlen(caption)+1); 00038 if (_caption != NULL) { 00039 strcpy(_caption, caption); 00040 } 00041 _captionColor = color; 00042 } 00043 } 00044 00045 ImageButton::~ImageButton() 00046 { 00047 if (_imgUp.pointerToFree != NULL) { 00048 free(_imgUp.pointerToFree); 00049 _imgUp.pointerToFree = NULL; 00050 } 00051 if (_imgDown.pointerToFree != NULL) { 00052 free(_imgDown.pointerToFree); 00053 _imgDown.pointerToFree = NULL; 00054 } 00055 if (_caption != NULL) { 00056 free(_caption); 00057 _caption = NULL; 00058 } 00059 } 00060 00061 bool ImageButton::loadImages(const char* imgUp, const char* imgDown) 00062 { 00063 if (_imgUp.pointerToFree != NULL) { 00064 free(_imgUp.pointerToFree); 00065 _imgUp.pointerToFree = NULL; 00066 } 00067 if (_imgDown.pointerToFree != NULL) { 00068 free(_imgDown.pointerToFree); 00069 _imgDown.pointerToFree = NULL; 00070 } 00071 if (Image::decode(imgUp, Image::RES_16BIT, &_imgUp) != 0) { 00072 DMBoard::instance().logger()->printf("Failed to load %s\n", imgUp); 00073 return false; 00074 } 00075 if (imgDown != NULL) { 00076 if (Image::decode(imgDown, Image::RES_16BIT, &_imgDown) == 0) { 00077 DMBoard::instance().logger()->printf("Failed to load %s\n", imgDown); 00078 return false; 00079 } 00080 } 00081 return true; 00082 } 00083 00084 bool ImageButton::loadImages(const unsigned char* imgUp, unsigned int imgUpSize, 00085 const unsigned char* imgDown, unsigned int imgDownSize) 00086 { 00087 if (_imgUp.pointerToFree != NULL) { 00088 free(_imgUp.pointerToFree); 00089 _imgUp.pointerToFree = NULL; 00090 } 00091 if (_imgDown.pointerToFree != NULL) { 00092 free(_imgDown.pointerToFree); 00093 _imgDown.pointerToFree = NULL; 00094 } 00095 if (Image::decode(imgUp, imgUpSize, Image::RES_16BIT, &_imgUp) != 0) { 00096 DMBoard::instance().logger()->printf("Failed to load %s\n", imgUp); 00097 return false; 00098 } 00099 if (imgDown != NULL) { 00100 if (Image::decode(imgDown, imgDownSize, Image::RES_16BIT, &_imgDown) == 0) { 00101 DMBoard::instance().logger()->printf("Failed to load %s\n", imgDown); 00102 return false; 00103 } 00104 } 00105 return true; 00106 } 00107 00108 bool ImageButton::loadImages(Resource* resImgUp, Resource* resImgDown) 00109 { 00110 if (_imgUp.pointerToFree != NULL) { 00111 free(_imgUp.pointerToFree); 00112 _imgUp.pointerToFree = NULL; 00113 } 00114 if (_imgDown.pointerToFree != NULL) { 00115 free(_imgDown.pointerToFree); 00116 _imgDown.pointerToFree = NULL; 00117 } 00118 if (Image::decode(resImgUp, Image::RES_16BIT, &_imgUp) != 0) { 00119 DMBoard::instance().logger()->printf("Failed to load \"up\" image\n"); 00120 return false; 00121 } 00122 if (resImgDown != NULL) { 00123 if (Image::decode(resImgDown, Image::RES_16BIT, &_imgDown) == 0) { 00124 DMBoard::instance().logger()->printf("Failed to load \"down\" image\n"); 00125 return false; 00126 } 00127 } 00128 return true; 00129 } 00130 00131 00132 void ImageButton::setTransparency(COLOR_T tColor) 00133 { 00134 _transparent = true; 00135 _transparentColor = tColor; 00136 } 00137 00138 void ImageButton::draw(COLOR_T* fb) 00139 { 00140 if (fb != NULL) { 00141 _win.fb = fb; 00142 } 00143 if (_caption != NULL) { 00144 _win.pen = _captionColor; 00145 swim_put_text_centered_win(&_win, _caption, _imgUp.height+2); 00146 } 00147 if (_pressed) { 00148 if (_imgDown.pixels != NULL) { 00149 if (_transparent) { 00150 swim_put_transparent_image_xy(&_win, _imgDown.pixels, _imgDown.width, _imgDown.height, 0, 0, _transparentColor); 00151 } else { 00152 swim_put_image(&_win, _imgDown.pixels, _imgDown.width, _imgDown.height); 00153 } 00154 } 00155 } else { 00156 if (_imgUp.pixels != NULL) { 00157 if (_transparent) { 00158 swim_put_transparent_image_xy(&_win, _imgUp.pixels, _imgUp.width, _imgUp.height, 0, 0, _transparentColor); 00159 } else { 00160 swim_put_image(&_win, _imgUp.pixels, _imgUp.width, _imgUp.height); 00161 } 00162 } 00163 } 00164 }
Generated on Wed Jul 13 2022 03:01:50 by
1.7.2
