You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					383 lines
				
				9.1 KiB
			
		
		
			
		
	
	
					383 lines
				
				9.1 KiB
			| 
								 
											13 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  u8g_circle.c
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Utility to draw empty and filled circles.
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Universal 8bit Graphics Library
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2011, bjthom@gmail.com
							 | 
						||
| 
								 | 
							
								  u8g_DrawCircle & u8g_DrawDisc by olikraus@gmail.com
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  All rights reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Redistribution and use in source and binary forms, with or without modification, 
							 | 
						||
| 
								 | 
							
								  are permitted provided that the following conditions are met:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  * Redistributions of source code must retain the above copyright notice, this list 
							 | 
						||
| 
								 | 
							
								    of conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								  * Redistributions in binary form must reproduce the above copyright notice, this 
							 | 
						||
| 
								 | 
							
								    list of conditions and the following disclaimer in the documentation and/or other 
							 | 
						||
| 
								 | 
							
								    materials provided with the distribution.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
							 | 
						||
| 
								 | 
							
								  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
							 | 
						||
| 
								 | 
							
								  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
							 | 
						||
| 
								 | 
							
								  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
							 | 
						||
| 
								 | 
							
								  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
							 | 
						||
| 
								 | 
							
								  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
							 | 
						||
| 
								 | 
							
								  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
							 | 
						||
| 
								 | 
							
								  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
							 | 
						||
| 
								 | 
							
								  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
							 | 
						||
| 
								 | 
							
								  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
							 | 
						||
| 
								 | 
							
								  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
							 | 
						||
| 
								 | 
							
								  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
							 | 
						||
| 
								 | 
							
								  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Addition to the U8G Library 02/25/12
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "u8g.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef OLD_CODE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void circ_upperRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 + x, y0 - y);
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 + y, y0 - x);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								void circ_upperLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 - x, y0 - y);
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 - y, y0 - x);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								void circ_lowerRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 + x, y0 + y);
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 + y, y0 + x);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								void circ_lowerLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 - x, y0 + y);
							 | 
						||
| 
								 | 
							
								  u8g_DrawPixel(u8g, x0 - y, y0 + x);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
								void circ_all(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
							 | 
						||
| 
								 | 
							
								  circ_upperRight(u8g, x, y, x0, y0);
							 | 
						||
| 
								 | 
							
								  circ_upperLeft(u8g, x, y, x0, y0);
							 | 
						||
| 
								 | 
							
								  circ_lowerRight(u8g, x, y, x0, y0);
							 | 
						||
| 
								 | 
							
								  circ_lowerLeft(u8g, x, y, x0, y0);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_DrawEmpCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  int f = 1 - rad;
							 | 
						||
| 
								 | 
							
								  int ddF_x = 1;
							 | 
						||
| 
								 | 
							
								  int ddF_y = -2*rad;
							 | 
						||
| 
								 | 
							
								  uint8_t x = 0;
							 | 
						||
| 
								 | 
							
								  uint8_t y = rad;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  void ( *circ_util )(u8g_t *, u8g_uint_t, u8g_uint_t, u8g_uint_t, u8g_uint_t);
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  switch (option)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
									case U8G_CIRC_UPPER_RIGHT:
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 - rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 + rad, y0);
							 | 
						||
| 
								 | 
							
										circ_util = circ_upperRight;
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case U8G_CIRC_UPPER_LEFT:
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 - rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 - rad, y0);
							 | 
						||
| 
								 | 
							
										circ_util = circ_upperLeft;
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case U8G_CIRC_LOWER_RIGHT:
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 + rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 + rad, y0);
							 | 
						||
| 
								 | 
							
										circ_util = circ_lowerRight;
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case U8G_CIRC_LOWER_LEFT:
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 + rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 - rad, y0);
							 | 
						||
| 
								 | 
							
										circ_util = circ_lowerLeft;
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
								        default:
							 | 
						||
| 
								 | 
							
									case U8G_CIRC_ALL:
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 + rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0, y0 - rad);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 + rad, y0);
							 | 
						||
| 
								 | 
							
										u8g_DrawPixel(u8g, x0 - rad, y0);
							 | 
						||
| 
								 | 
							
										circ_util = circ_all;
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  while( x < y )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    if(f >= 0) 
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      y--;
							 | 
						||
| 
								 | 
							
								      ddF_y += 2;
							 | 
						||
| 
								 | 
							
								      f += ddF_y;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    x++;
							 | 
						||
| 
								 | 
							
								    ddF_x += 2;
							 | 
						||
| 
								 | 
							
								    f += ddF_x;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    circ_util(u8g, x, y, x0, y0);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_DrawFillCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  int f = 1 - rad;
							 | 
						||
| 
								 | 
							
								  int ddF_x = 1;
							 | 
						||
| 
								 | 
							
								  int ddF_y = -2*rad;
							 | 
						||
| 
								 | 
							
								  uint8_t x = 0;
							 | 
						||
| 
								 | 
							
								  uint8_t y = rad;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  // Draw vertical diameter at the horiz. center
							 | 
						||
| 
								 | 
							
								  // u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (option == U8G_CIRC_UPPER_LEFT || option == U8G_CIRC_UPPER_RIGHT) {
							 | 
						||
| 
								 | 
							
									u8g_DrawVLine(u8g, x0, y0 - rad, rad+1);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  else if (option == U8G_CIRC_LOWER_LEFT || option == U8G_CIRC_LOWER_RIGHT) {
							 | 
						||
| 
								 | 
							
									u8g_DrawVLine(u8g, x0, y0, rad+1);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  else {
							 | 
						||
| 
								 | 
							
									u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  while( x < y )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    if(f >= 0) 
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      y--;
							 | 
						||
| 
								 | 
							
								      ddF_y += 2;
							 | 
						||
| 
								 | 
							
								      f += ddF_y;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    x++;
							 | 
						||
| 
								 | 
							
								    ddF_x += 2;
							 | 
						||
| 
								 | 
							
								    f += ddF_x;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
									//Draw vertical lines from one point to another
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									switch (option)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										case U8G_CIRC_UPPER_RIGHT:
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case U8G_CIRC_UPPER_LEFT:
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case U8G_CIRC_LOWER_RIGHT:
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+x, y0, y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+y, y0, x+1);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case U8G_CIRC_LOWER_LEFT:
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-x, y0, y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-y, y0, x+1);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case U8G_CIRC_ALL:
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+x, y0-y, 2*y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-x, y0-y, 2*y+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0+y, y0-x, 2*x+1);
							 | 
						||
| 
								 | 
							
											u8g_DrawVLine(u8g, x0-y, y0-x, 2*x+1);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*=========================================================================*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* upper right */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_UPPER_RIGHT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 + x, y0 - y);
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 + y, y0 - x);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* upper left */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_UPPER_LEFT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 - x, y0 - y);
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 - y, y0 - x);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* lower right */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_LOWER_RIGHT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 + x, y0 + y);
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 + y, y0 + x);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* lower left */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_LOWER_LEFT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 - x, y0 + y);
							 | 
						||
| 
								 | 
							
								      u8g_DrawPixel(u8g, x0 - y, y0 + x);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_draw_circle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    u8g_int_t f;
							 | 
						||
| 
								 | 
							
								    u8g_int_t ddF_x;
							 | 
						||
| 
								 | 
							
								    u8g_int_t ddF_y;
							 | 
						||
| 
								 | 
							
								    u8g_uint_t x;
							 | 
						||
| 
								 | 
							
								    u8g_uint_t y;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    f = 1;
							 | 
						||
| 
								 | 
							
								    f -= rad;
							 | 
						||
| 
								 | 
							
								    ddF_x = 1;
							 | 
						||
| 
								 | 
							
								    ddF_y = 0;
							 | 
						||
| 
								 | 
							
								    ddF_y -= rad;
							 | 
						||
| 
								 | 
							
								    ddF_y *= 2;
							 | 
						||
| 
								 | 
							
								    x = 0;
							 | 
						||
| 
								 | 
							
								    y = rad;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    u8g_draw_circle_section(u8g, x, y, x0, y0, option);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    while ( x < y )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if (f >= 0) 
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        y--;
							 | 
						||
| 
								 | 
							
								        ddF_y += 2;
							 | 
						||
| 
								 | 
							
								        f += ddF_y;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      x++;
							 | 
						||
| 
								 | 
							
								      ddF_x += 2;
							 | 
						||
| 
								 | 
							
								      f += ddF_x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      u8g_draw_circle_section(u8g, x, y, x0, y0, option);    
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_DrawCircle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  /* check for bounding box */
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    u8g_uint_t radp, radp2;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    radp = rad;
							 | 
						||
| 
								 | 
							
								    radp++;
							 | 
						||
| 
								 | 
							
								    radp2 = radp;
							 | 
						||
| 
								 | 
							
								    radp2 *= 2;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
							 | 
						||
| 
								 | 
							
								      return;    
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  /* draw circle */
							 | 
						||
| 
								 | 
							
								  u8g_draw_circle(u8g, x0, y0, rad, option);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* upper right */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_UPPER_RIGHT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* upper left */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_UPPER_LEFT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* lower right */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_LOWER_RIGHT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0+x, y0, y+1);
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0+y, y0, x+1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /* lower left */
							 | 
						||
| 
								 | 
							
								    if ( option & U8G_DRAW_LOWER_LEFT )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0-x, y0, y+1);
							 | 
						||
| 
								 | 
							
								      u8g_DrawVLine(u8g, x0-y, y0, x+1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_draw_disc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  u8g_int_t f;
							 | 
						||
| 
								 | 
							
								  u8g_int_t ddF_x;
							 | 
						||
| 
								 | 
							
								  u8g_int_t ddF_y;
							 | 
						||
| 
								 | 
							
								  u8g_uint_t x;
							 | 
						||
| 
								 | 
							
								  u8g_uint_t y;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  f = 1;
							 | 
						||
| 
								 | 
							
								  f -= rad;
							 | 
						||
| 
								 | 
							
								  ddF_x = 1;
							 | 
						||
| 
								 | 
							
								  ddF_y = 0;
							 | 
						||
| 
								 | 
							
								  ddF_y -= rad;
							 | 
						||
| 
								 | 
							
								  ddF_y *= 2;
							 | 
						||
| 
								 | 
							
								  x = 0;
							 | 
						||
| 
								 | 
							
								  y = rad;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  u8g_draw_disc_section(u8g, x, y, x0, y0, option);
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  while ( x < y )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    if (f >= 0) 
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      y--;
							 | 
						||
| 
								 | 
							
								      ddF_y += 2;
							 | 
						||
| 
								 | 
							
								      f += ddF_y;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    x++;
							 | 
						||
| 
								 | 
							
								    ddF_x += 2;
							 | 
						||
| 
								 | 
							
								    f += ddF_x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    u8g_draw_disc_section(u8g, x, y, x0, y0, option);    
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void u8g_DrawDisc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  /* check for bounding box */
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    u8g_uint_t radp, radp2;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    radp = rad;
							 | 
						||
| 
								 | 
							
								    radp++;
							 | 
						||
| 
								 | 
							
								    radp2 = radp;
							 | 
						||
| 
								 | 
							
								    radp2 *= 2;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
							 | 
						||
| 
								 | 
							
								      return;    
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  /* draw disc */
							 | 
						||
| 
								 | 
							
								  u8g_draw_disc(u8g, x0, y0, rad, option);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |