hadif azli / Mbed 2 deprecated TEST123

Dependencies:   mbed Blynk

Committer:
lixianyu
Date:
Mon Jun 13 02:21:11 2016 +0000
Revision:
1:0e75de2a5d21
Parent:
0:d8f4c441e032
u8glib???????????????????????????Adafruit_GFX????OLED????????bitmap??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:d8f4c441e032 1 /*
lixianyu 0:d8f4c441e032 2
lixianyu 0:d8f4c441e032 3 u8g_circle.c
lixianyu 0:d8f4c441e032 4
lixianyu 0:d8f4c441e032 5 Utility to draw empty and filled circles.
lixianyu 0:d8f4c441e032 6
lixianyu 0:d8f4c441e032 7 Universal 8bit Graphics Library
lixianyu 0:d8f4c441e032 8
lixianyu 0:d8f4c441e032 9 Copyright (c) 2011, bjthom@gmail.com
lixianyu 0:d8f4c441e032 10 u8g_DrawCircle & u8g_DrawDisc by olikraus@gmail.com
lixianyu 0:d8f4c441e032 11
lixianyu 0:d8f4c441e032 12 All rights reserved.
lixianyu 0:d8f4c441e032 13
lixianyu 0:d8f4c441e032 14 Redistribution and use in source and binary forms, with or without modification,
lixianyu 0:d8f4c441e032 15 are permitted provided that the following conditions are met:
lixianyu 0:d8f4c441e032 16
lixianyu 0:d8f4c441e032 17 * Redistributions of source code must retain the above copyright notice, this list
lixianyu 0:d8f4c441e032 18 of conditions and the following disclaimer.
lixianyu 0:d8f4c441e032 19
lixianyu 0:d8f4c441e032 20 * Redistributions in binary form must reproduce the above copyright notice, this
lixianyu 0:d8f4c441e032 21 list of conditions and the following disclaimer in the documentation and/or other
lixianyu 0:d8f4c441e032 22 materials provided with the distribution.
lixianyu 0:d8f4c441e032 23
lixianyu 0:d8f4c441e032 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
lixianyu 0:d8f4c441e032 25 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
lixianyu 0:d8f4c441e032 26 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
lixianyu 0:d8f4c441e032 27 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
lixianyu 0:d8f4c441e032 28 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
lixianyu 0:d8f4c441e032 29 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
lixianyu 0:d8f4c441e032 30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
lixianyu 0:d8f4c441e032 31 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
lixianyu 0:d8f4c441e032 32 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
lixianyu 0:d8f4c441e032 33 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
lixianyu 0:d8f4c441e032 34 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
lixianyu 0:d8f4c441e032 35 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
lixianyu 0:d8f4c441e032 36 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lixianyu 0:d8f4c441e032 37
lixianyu 0:d8f4c441e032 38 Addition to the U8G Library 02/25/12
lixianyu 0:d8f4c441e032 39
lixianyu 0:d8f4c441e032 40
lixianyu 0:d8f4c441e032 41 */
lixianyu 0:d8f4c441e032 42
lixianyu 0:d8f4c441e032 43 #include "u8g.h"
lixianyu 0:d8f4c441e032 44
lixianyu 0:d8f4c441e032 45 #ifdef OLD_CODE
lixianyu 0:d8f4c441e032 46
lixianyu 0:d8f4c441e032 47 void circ_upperRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
lixianyu 0:d8f4c441e032 48 u8g_DrawPixel(u8g, x0 + x, y0 - y);
lixianyu 0:d8f4c441e032 49 u8g_DrawPixel(u8g, x0 + y, y0 - x);
lixianyu 0:d8f4c441e032 50 }
lixianyu 0:d8f4c441e032 51
lixianyu 0:d8f4c441e032 52 void circ_upperLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
lixianyu 0:d8f4c441e032 53 u8g_DrawPixel(u8g, x0 - x, y0 - y);
lixianyu 0:d8f4c441e032 54 u8g_DrawPixel(u8g, x0 - y, y0 - x);
lixianyu 0:d8f4c441e032 55 }
lixianyu 0:d8f4c441e032 56
lixianyu 0:d8f4c441e032 57 void circ_lowerRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
lixianyu 0:d8f4c441e032 58 u8g_DrawPixel(u8g, x0 + x, y0 + y);
lixianyu 0:d8f4c441e032 59 u8g_DrawPixel(u8g, x0 + y, y0 + x);
lixianyu 0:d8f4c441e032 60 }
lixianyu 0:d8f4c441e032 61
lixianyu 0:d8f4c441e032 62 void circ_lowerLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
lixianyu 0:d8f4c441e032 63 u8g_DrawPixel(u8g, x0 - x, y0 + y);
lixianyu 0:d8f4c441e032 64 u8g_DrawPixel(u8g, x0 - y, y0 + x);
lixianyu 0:d8f4c441e032 65 }
lixianyu 0:d8f4c441e032 66
lixianyu 0:d8f4c441e032 67 void circ_all(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
lixianyu 0:d8f4c441e032 68 circ_upperRight(u8g, x, y, x0, y0);
lixianyu 0:d8f4c441e032 69 circ_upperLeft(u8g, x, y, x0, y0);
lixianyu 0:d8f4c441e032 70 circ_lowerRight(u8g, x, y, x0, y0);
lixianyu 0:d8f4c441e032 71 circ_lowerLeft(u8g, x, y, x0, y0);
lixianyu 0:d8f4c441e032 72 }
lixianyu 0:d8f4c441e032 73
lixianyu 0:d8f4c441e032 74 void u8g_DrawEmpCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 75 {
lixianyu 0:d8f4c441e032 76 if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
lixianyu 0:d8f4c441e032 77 return;
lixianyu 0:d8f4c441e032 78
lixianyu 0:d8f4c441e032 79 int f = 1 - rad;
lixianyu 0:d8f4c441e032 80 int ddF_x = 1;
lixianyu 0:d8f4c441e032 81 int ddF_y = -2*rad;
lixianyu 0:d8f4c441e032 82 uint8_t x = 0;
lixianyu 0:d8f4c441e032 83 uint8_t y = rad;
lixianyu 0:d8f4c441e032 84
lixianyu 0:d8f4c441e032 85 void ( *circ_util )(u8g_t *, u8g_uint_t, u8g_uint_t, u8g_uint_t, u8g_uint_t);
lixianyu 0:d8f4c441e032 86
lixianyu 0:d8f4c441e032 87 switch (option)
lixianyu 0:d8f4c441e032 88 {
lixianyu 0:d8f4c441e032 89 case U8G_CIRC_UPPER_RIGHT:
lixianyu 0:d8f4c441e032 90 u8g_DrawPixel(u8g, x0, y0 - rad);
lixianyu 0:d8f4c441e032 91 u8g_DrawPixel(u8g, x0 + rad, y0);
lixianyu 0:d8f4c441e032 92 circ_util = circ_upperRight;
lixianyu 0:d8f4c441e032 93 break;
lixianyu 0:d8f4c441e032 94 case U8G_CIRC_UPPER_LEFT:
lixianyu 0:d8f4c441e032 95 u8g_DrawPixel(u8g, x0, y0 - rad);
lixianyu 0:d8f4c441e032 96 u8g_DrawPixel(u8g, x0 - rad, y0);
lixianyu 0:d8f4c441e032 97 circ_util = circ_upperLeft;
lixianyu 0:d8f4c441e032 98 break;
lixianyu 0:d8f4c441e032 99 case U8G_CIRC_LOWER_RIGHT:
lixianyu 0:d8f4c441e032 100 u8g_DrawPixel(u8g, x0, y0 + rad);
lixianyu 0:d8f4c441e032 101 u8g_DrawPixel(u8g, x0 + rad, y0);
lixianyu 0:d8f4c441e032 102 circ_util = circ_lowerRight;
lixianyu 0:d8f4c441e032 103 break;
lixianyu 0:d8f4c441e032 104 case U8G_CIRC_LOWER_LEFT:
lixianyu 0:d8f4c441e032 105 u8g_DrawPixel(u8g, x0, y0 + rad);
lixianyu 0:d8f4c441e032 106 u8g_DrawPixel(u8g, x0 - rad, y0);
lixianyu 0:d8f4c441e032 107 circ_util = circ_lowerLeft;
lixianyu 0:d8f4c441e032 108 break;
lixianyu 0:d8f4c441e032 109 default:
lixianyu 0:d8f4c441e032 110 case U8G_CIRC_ALL:
lixianyu 0:d8f4c441e032 111 u8g_DrawPixel(u8g, x0, y0 + rad);
lixianyu 0:d8f4c441e032 112 u8g_DrawPixel(u8g, x0, y0 - rad);
lixianyu 0:d8f4c441e032 113 u8g_DrawPixel(u8g, x0 + rad, y0);
lixianyu 0:d8f4c441e032 114 u8g_DrawPixel(u8g, x0 - rad, y0);
lixianyu 0:d8f4c441e032 115 circ_util = circ_all;
lixianyu 0:d8f4c441e032 116 break;
lixianyu 0:d8f4c441e032 117 }
lixianyu 0:d8f4c441e032 118
lixianyu 0:d8f4c441e032 119 while( x < y )
lixianyu 0:d8f4c441e032 120 {
lixianyu 0:d8f4c441e032 121 if(f >= 0)
lixianyu 0:d8f4c441e032 122 {
lixianyu 0:d8f4c441e032 123 y--;
lixianyu 0:d8f4c441e032 124 ddF_y += 2;
lixianyu 0:d8f4c441e032 125 f += ddF_y;
lixianyu 0:d8f4c441e032 126 }
lixianyu 0:d8f4c441e032 127 x++;
lixianyu 0:d8f4c441e032 128 ddF_x += 2;
lixianyu 0:d8f4c441e032 129 f += ddF_x;
lixianyu 0:d8f4c441e032 130
lixianyu 0:d8f4c441e032 131 circ_util(u8g, x, y, x0, y0);
lixianyu 0:d8f4c441e032 132 }
lixianyu 0:d8f4c441e032 133 }
lixianyu 0:d8f4c441e032 134
lixianyu 0:d8f4c441e032 135
lixianyu 0:d8f4c441e032 136 void u8g_DrawFillCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 137 {
lixianyu 0:d8f4c441e032 138 if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
lixianyu 0:d8f4c441e032 139 return;
lixianyu 0:d8f4c441e032 140
lixianyu 0:d8f4c441e032 141 int f = 1 - rad;
lixianyu 0:d8f4c441e032 142 int ddF_x = 1;
lixianyu 0:d8f4c441e032 143 int ddF_y = -2*rad;
lixianyu 0:d8f4c441e032 144 uint8_t x = 0;
lixianyu 0:d8f4c441e032 145 uint8_t y = rad;
lixianyu 0:d8f4c441e032 146
lixianyu 0:d8f4c441e032 147 // Draw vertical diameter at the horiz. center
lixianyu 0:d8f4c441e032 148 // u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
lixianyu 0:d8f4c441e032 149
lixianyu 0:d8f4c441e032 150 if (option == U8G_CIRC_UPPER_LEFT || option == U8G_CIRC_UPPER_RIGHT) {
lixianyu 0:d8f4c441e032 151 u8g_DrawVLine(u8g, x0, y0 - rad, rad+1);
lixianyu 0:d8f4c441e032 152 }
lixianyu 0:d8f4c441e032 153 else if (option == U8G_CIRC_LOWER_LEFT || option == U8G_CIRC_LOWER_RIGHT) {
lixianyu 0:d8f4c441e032 154 u8g_DrawVLine(u8g, x0, y0, rad+1);
lixianyu 0:d8f4c441e032 155 }
lixianyu 0:d8f4c441e032 156 else {
lixianyu 0:d8f4c441e032 157 u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
lixianyu 0:d8f4c441e032 158 }
lixianyu 0:d8f4c441e032 159
lixianyu 0:d8f4c441e032 160 while( x < y )
lixianyu 0:d8f4c441e032 161 {
lixianyu 0:d8f4c441e032 162 if(f >= 0)
lixianyu 0:d8f4c441e032 163 {
lixianyu 0:d8f4c441e032 164 y--;
lixianyu 0:d8f4c441e032 165 ddF_y += 2;
lixianyu 0:d8f4c441e032 166 f += ddF_y;
lixianyu 0:d8f4c441e032 167 }
lixianyu 0:d8f4c441e032 168 x++;
lixianyu 0:d8f4c441e032 169 ddF_x += 2;
lixianyu 0:d8f4c441e032 170 f += ddF_x;
lixianyu 0:d8f4c441e032 171
lixianyu 0:d8f4c441e032 172 //Draw vertical lines from one point to another
lixianyu 0:d8f4c441e032 173
lixianyu 0:d8f4c441e032 174 switch (option)
lixianyu 0:d8f4c441e032 175 {
lixianyu 0:d8f4c441e032 176 case U8G_CIRC_UPPER_RIGHT:
lixianyu 0:d8f4c441e032 177 u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
lixianyu 0:d8f4c441e032 178 u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
lixianyu 0:d8f4c441e032 179 break;
lixianyu 0:d8f4c441e032 180 case U8G_CIRC_UPPER_LEFT:
lixianyu 0:d8f4c441e032 181 u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
lixianyu 0:d8f4c441e032 182 u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
lixianyu 0:d8f4c441e032 183 break;
lixianyu 0:d8f4c441e032 184 case U8G_CIRC_LOWER_RIGHT:
lixianyu 0:d8f4c441e032 185 u8g_DrawVLine(u8g, x0+x, y0, y+1);
lixianyu 0:d8f4c441e032 186 u8g_DrawVLine(u8g, x0+y, y0, x+1);
lixianyu 0:d8f4c441e032 187 break;
lixianyu 0:d8f4c441e032 188 case U8G_CIRC_LOWER_LEFT:
lixianyu 0:d8f4c441e032 189 u8g_DrawVLine(u8g, x0-x, y0, y+1);
lixianyu 0:d8f4c441e032 190 u8g_DrawVLine(u8g, x0-y, y0, x+1);
lixianyu 0:d8f4c441e032 191 break;
lixianyu 0:d8f4c441e032 192 case U8G_CIRC_ALL:
lixianyu 0:d8f4c441e032 193 u8g_DrawVLine(u8g, x0+x, y0-y, 2*y+1);
lixianyu 0:d8f4c441e032 194 u8g_DrawVLine(u8g, x0-x, y0-y, 2*y+1);
lixianyu 0:d8f4c441e032 195 u8g_DrawVLine(u8g, x0+y, y0-x, 2*x+1);
lixianyu 0:d8f4c441e032 196 u8g_DrawVLine(u8g, x0-y, y0-x, 2*x+1);
lixianyu 0:d8f4c441e032 197 break;
lixianyu 0:d8f4c441e032 198 }
lixianyu 0:d8f4c441e032 199 }
lixianyu 0:d8f4c441e032 200 }
lixianyu 0:d8f4c441e032 201
lixianyu 0:d8f4c441e032 202 #endif
lixianyu 0:d8f4c441e032 203
lixianyu 0:d8f4c441e032 204 /*=========================================================================*/
lixianyu 0:d8f4c441e032 205
lixianyu 0:d8f4c441e032 206 static void u8g_draw_circle_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
lixianyu 0:d8f4c441e032 207
lixianyu 0:d8f4c441e032 208 static void u8g_draw_circle_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
lixianyu 0:d8f4c441e032 209 {
lixianyu 0:d8f4c441e032 210 /* upper right */
lixianyu 0:d8f4c441e032 211 if ( option & U8G_DRAW_UPPER_RIGHT )
lixianyu 0:d8f4c441e032 212 {
lixianyu 0:d8f4c441e032 213 u8g_DrawPixel(u8g, x0 + x, y0 - y);
lixianyu 0:d8f4c441e032 214 u8g_DrawPixel(u8g, x0 + y, y0 - x);
lixianyu 0:d8f4c441e032 215 }
lixianyu 0:d8f4c441e032 216
lixianyu 0:d8f4c441e032 217 /* upper left */
lixianyu 0:d8f4c441e032 218 if ( option & U8G_DRAW_UPPER_LEFT )
lixianyu 0:d8f4c441e032 219 {
lixianyu 0:d8f4c441e032 220 u8g_DrawPixel(u8g, x0 - x, y0 - y);
lixianyu 0:d8f4c441e032 221 u8g_DrawPixel(u8g, x0 - y, y0 - x);
lixianyu 0:d8f4c441e032 222 }
lixianyu 0:d8f4c441e032 223
lixianyu 0:d8f4c441e032 224 /* lower right */
lixianyu 0:d8f4c441e032 225 if ( option & U8G_DRAW_LOWER_RIGHT )
lixianyu 0:d8f4c441e032 226 {
lixianyu 0:d8f4c441e032 227 u8g_DrawPixel(u8g, x0 + x, y0 + y);
lixianyu 0:d8f4c441e032 228 u8g_DrawPixel(u8g, x0 + y, y0 + x);
lixianyu 0:d8f4c441e032 229 }
lixianyu 0:d8f4c441e032 230
lixianyu 0:d8f4c441e032 231 /* lower left */
lixianyu 0:d8f4c441e032 232 if ( option & U8G_DRAW_LOWER_LEFT )
lixianyu 0:d8f4c441e032 233 {
lixianyu 0:d8f4c441e032 234 u8g_DrawPixel(u8g, x0 - x, y0 + y);
lixianyu 0:d8f4c441e032 235 u8g_DrawPixel(u8g, x0 - y, y0 + x);
lixianyu 0:d8f4c441e032 236 }
lixianyu 0:d8f4c441e032 237 }
lixianyu 0:d8f4c441e032 238
lixianyu 0:d8f4c441e032 239 void u8g_draw_circle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 240 {
lixianyu 0:d8f4c441e032 241 u8g_int_t f;
lixianyu 0:d8f4c441e032 242 u8g_int_t ddF_x;
lixianyu 0:d8f4c441e032 243 u8g_int_t ddF_y;
lixianyu 0:d8f4c441e032 244 u8g_uint_t x;
lixianyu 0:d8f4c441e032 245 u8g_uint_t y;
lixianyu 0:d8f4c441e032 246
lixianyu 0:d8f4c441e032 247 f = 1;
lixianyu 0:d8f4c441e032 248 f -= rad;
lixianyu 0:d8f4c441e032 249 ddF_x = 1;
lixianyu 0:d8f4c441e032 250 ddF_y = 0;
lixianyu 0:d8f4c441e032 251 ddF_y -= rad;
lixianyu 0:d8f4c441e032 252 ddF_y *= 2;
lixianyu 0:d8f4c441e032 253 x = 0;
lixianyu 0:d8f4c441e032 254 y = rad;
lixianyu 0:d8f4c441e032 255
lixianyu 0:d8f4c441e032 256 u8g_draw_circle_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 257
lixianyu 0:d8f4c441e032 258 while ( x < y )
lixianyu 0:d8f4c441e032 259 {
lixianyu 0:d8f4c441e032 260 if (f >= 0)
lixianyu 0:d8f4c441e032 261 {
lixianyu 0:d8f4c441e032 262 y--;
lixianyu 0:d8f4c441e032 263 ddF_y += 2;
lixianyu 0:d8f4c441e032 264 f += ddF_y;
lixianyu 0:d8f4c441e032 265 }
lixianyu 0:d8f4c441e032 266 x++;
lixianyu 0:d8f4c441e032 267 ddF_x += 2;
lixianyu 0:d8f4c441e032 268 f += ddF_x;
lixianyu 0:d8f4c441e032 269
lixianyu 0:d8f4c441e032 270 u8g_draw_circle_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 271 }
lixianyu 0:d8f4c441e032 272 }
lixianyu 0:d8f4c441e032 273
lixianyu 0:d8f4c441e032 274 void u8g_DrawCircle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 275 {
lixianyu 0:d8f4c441e032 276 /* check for bounding box */
lixianyu 0:d8f4c441e032 277 {
lixianyu 0:d8f4c441e032 278 u8g_uint_t radp, radp2;
lixianyu 0:d8f4c441e032 279
lixianyu 0:d8f4c441e032 280 radp = rad;
lixianyu 0:d8f4c441e032 281 radp++;
lixianyu 0:d8f4c441e032 282 radp2 = radp;
lixianyu 0:d8f4c441e032 283 radp2 *= 2;
lixianyu 0:d8f4c441e032 284
lixianyu 0:d8f4c441e032 285 if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
lixianyu 0:d8f4c441e032 286 return;
lixianyu 0:d8f4c441e032 287 }
lixianyu 0:d8f4c441e032 288
lixianyu 0:d8f4c441e032 289 /* draw circle */
lixianyu 0:d8f4c441e032 290 u8g_draw_circle(u8g, x0, y0, rad, option);
lixianyu 0:d8f4c441e032 291 }
lixianyu 0:d8f4c441e032 292
lixianyu 0:d8f4c441e032 293 static void u8g_draw_disc_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
lixianyu 0:d8f4c441e032 294
lixianyu 0:d8f4c441e032 295 static void u8g_draw_disc_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
lixianyu 0:d8f4c441e032 296 {
lixianyu 0:d8f4c441e032 297 /* upper right */
lixianyu 0:d8f4c441e032 298 if ( option & U8G_DRAW_UPPER_RIGHT )
lixianyu 0:d8f4c441e032 299 {
lixianyu 0:d8f4c441e032 300 u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
lixianyu 0:d8f4c441e032 301 u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
lixianyu 0:d8f4c441e032 302 }
lixianyu 0:d8f4c441e032 303
lixianyu 0:d8f4c441e032 304 /* upper left */
lixianyu 0:d8f4c441e032 305 if ( option & U8G_DRAW_UPPER_LEFT )
lixianyu 0:d8f4c441e032 306 {
lixianyu 0:d8f4c441e032 307 u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
lixianyu 0:d8f4c441e032 308 u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
lixianyu 0:d8f4c441e032 309 }
lixianyu 0:d8f4c441e032 310
lixianyu 0:d8f4c441e032 311 /* lower right */
lixianyu 0:d8f4c441e032 312 if ( option & U8G_DRAW_LOWER_RIGHT )
lixianyu 0:d8f4c441e032 313 {
lixianyu 0:d8f4c441e032 314 u8g_DrawVLine(u8g, x0+x, y0, y+1);
lixianyu 0:d8f4c441e032 315 u8g_DrawVLine(u8g, x0+y, y0, x+1);
lixianyu 0:d8f4c441e032 316 }
lixianyu 0:d8f4c441e032 317
lixianyu 0:d8f4c441e032 318 /* lower left */
lixianyu 0:d8f4c441e032 319 if ( option & U8G_DRAW_LOWER_LEFT )
lixianyu 0:d8f4c441e032 320 {
lixianyu 0:d8f4c441e032 321 u8g_DrawVLine(u8g, x0-x, y0, y+1);
lixianyu 0:d8f4c441e032 322 u8g_DrawVLine(u8g, x0-y, y0, x+1);
lixianyu 0:d8f4c441e032 323 }
lixianyu 0:d8f4c441e032 324 }
lixianyu 0:d8f4c441e032 325
lixianyu 0:d8f4c441e032 326 void u8g_draw_disc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 327 {
lixianyu 0:d8f4c441e032 328 u8g_int_t f;
lixianyu 0:d8f4c441e032 329 u8g_int_t ddF_x;
lixianyu 0:d8f4c441e032 330 u8g_int_t ddF_y;
lixianyu 0:d8f4c441e032 331 u8g_uint_t x;
lixianyu 0:d8f4c441e032 332 u8g_uint_t y;
lixianyu 0:d8f4c441e032 333
lixianyu 0:d8f4c441e032 334 f = 1;
lixianyu 0:d8f4c441e032 335 f -= rad;
lixianyu 0:d8f4c441e032 336 ddF_x = 1;
lixianyu 0:d8f4c441e032 337 ddF_y = 0;
lixianyu 0:d8f4c441e032 338 ddF_y -= rad;
lixianyu 0:d8f4c441e032 339 ddF_y *= 2;
lixianyu 0:d8f4c441e032 340 x = 0;
lixianyu 0:d8f4c441e032 341 y = rad;
lixianyu 0:d8f4c441e032 342
lixianyu 0:d8f4c441e032 343 u8g_draw_disc_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 344
lixianyu 0:d8f4c441e032 345 while ( x < y )
lixianyu 0:d8f4c441e032 346 {
lixianyu 0:d8f4c441e032 347 if (f >= 0)
lixianyu 0:d8f4c441e032 348 {
lixianyu 0:d8f4c441e032 349 y--;
lixianyu 0:d8f4c441e032 350 ddF_y += 2;
lixianyu 0:d8f4c441e032 351 f += ddF_y;
lixianyu 0:d8f4c441e032 352 }
lixianyu 0:d8f4c441e032 353 x++;
lixianyu 0:d8f4c441e032 354 ddF_x += 2;
lixianyu 0:d8f4c441e032 355 f += ddF_x;
lixianyu 0:d8f4c441e032 356
lixianyu 0:d8f4c441e032 357 u8g_draw_disc_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 358 }
lixianyu 0:d8f4c441e032 359 }
lixianyu 0:d8f4c441e032 360
lixianyu 0:d8f4c441e032 361 void u8g_DrawDisc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
lixianyu 0:d8f4c441e032 362 {
lixianyu 0:d8f4c441e032 363 /* check for bounding box */
lixianyu 0:d8f4c441e032 364 {
lixianyu 0:d8f4c441e032 365 u8g_uint_t radp, radp2;
lixianyu 0:d8f4c441e032 366
lixianyu 0:d8f4c441e032 367 radp = rad;
lixianyu 0:d8f4c441e032 368 radp++;
lixianyu 0:d8f4c441e032 369 radp2 = radp;
lixianyu 0:d8f4c441e032 370 radp2 *= 2;
lixianyu 0:d8f4c441e032 371
lixianyu 0:d8f4c441e032 372 if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
lixianyu 0:d8f4c441e032 373 return;
lixianyu 0:d8f4c441e032 374 }
lixianyu 0:d8f4c441e032 375
lixianyu 0:d8f4c441e032 376 /* draw disc */
lixianyu 0:d8f4c441e032 377 u8g_draw_disc(u8g, x0, y0, rad, option);
lixianyu 0:d8f4c441e032 378 }
lixianyu 0:d8f4c441e032 379
lixianyu 0:d8f4c441e032 380
lixianyu 0:d8f4c441e032 381
lixianyu 0:d8f4c441e032 382
lixianyu 0:d8f4c441e032 383