mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Add helper function for doing depth unit calculations
.. and use it for printing too. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									184eecf7c0
								
							
						
					
					
						commit
						515a917152
					
				
					 4 changed files with 37 additions and 17 deletions
				
			
		
							
								
								
									
										25
									
								
								dive.c
									
										
									
									
									
								
							
							
						
						
									
										25
									
								
								dive.c
									
										
									
									
									
								
							|  | @ -5,6 +5,31 @@ | |||
| 
 | ||||
| #include "dive.h" | ||||
| 
 | ||||
| double get_depth_units(unsigned int mm, int *frac, const char **units) | ||||
| { | ||||
| 	int decimals; | ||||
| 	double d; | ||||
| 	const char *unit; | ||||
| 
 | ||||
| 	switch (output_units.length) { | ||||
| 	case METERS: | ||||
| 		d = mm / 1000.0; | ||||
| 		unit = "m"; | ||||
| 		decimals = d < 20; | ||||
| 		break; | ||||
| 	case FEET: | ||||
| 		d = mm_to_feet(mm); | ||||
| 		unit = "ft"; | ||||
| 		decimals = 0; | ||||
| 		break; | ||||
| 	} | ||||
| 	if (frac) | ||||
| 		*frac = decimals; | ||||
| 	if (units) | ||||
| 		*units = unit; | ||||
| 	return d; | ||||
| } | ||||
| 
 | ||||
| struct dive *alloc_dive(void) | ||||
| { | ||||
| 	const int initial_samples = 5; | ||||
|  |  | |||
							
								
								
									
										2
									
								
								dive.h
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								dive.h
									
										
									
									
									
								
							|  | @ -86,6 +86,8 @@ typedef struct { | |||
| 	pressure_t start, end; | ||||
| } cylinder_t; | ||||
| 
 | ||||
| extern double get_depth_units(unsigned int mm, int *frac, const char **units); | ||||
| 
 | ||||
| static inline double mm_to_feet(int mm) | ||||
| { | ||||
| 	return mm * 0.00328084; | ||||
|  |  | |||
							
								
								
									
										9
									
								
								print.c
									
										
									
									
									
								
							
							
						
						
									
										9
									
								
								print.c
									
										
									
									
									
								
							|  | @ -26,7 +26,9 @@ static void set_font(PangoLayout *layout, PangoFontDescription *font, double siz | |||
|  */ | ||||
| static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, PangoFontDescription *font) | ||||
| { | ||||
| 	int len, width, height, maxwidth, maxheight; | ||||
| 	double depth; | ||||
| 	const char *unit; | ||||
| 	int len, decimals, width, height, maxwidth, maxheight; | ||||
| 	PangoLayout *layout; | ||||
| 	struct tm *tm; | ||||
| 	char buffer[1024], divenr[20]; | ||||
|  | @ -64,11 +66,12 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P | |||
| 	 * with the depth/duration information. Need to mask that or | ||||
| 	 * create a box or something. | ||||
| 	 */ | ||||
| 	depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit); | ||||
| 	snprintf(buffer, sizeof(buffer), | ||||
| 		"Max depth: %d ft\n" | ||||
| 		"Max depth: %.*f %s\n" | ||||
| 		"Duration: %d:%02d\n" | ||||
| 		"%s", | ||||
| 		to_feet(dive->maxdepth), | ||||
| 		decimals, depth, unit, | ||||
| 		dive->duration.seconds / 60, | ||||
| 		dive->duration.seconds % 60, | ||||
| 		dive->buddy ? :""); | ||||
|  |  | |||
							
								
								
									
										18
									
								
								profile.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								profile.c
									
										
									
									
									
								
							|  | @ -158,22 +158,12 @@ static void plot_text(struct graphics_context *gc, const text_render_options_t * | |||
| 
 | ||||
| static void render_depth_sample(struct graphics_context *gc, struct plot_data *entry, const text_render_options_t *tro) | ||||
| { | ||||
| 	int sec = entry->sec; | ||||
| 	depth_t depth = { entry->val }; | ||||
| 	const char *fmt; | ||||
| 	int sec = entry->sec, decimals; | ||||
| 	double d; | ||||
| 
 | ||||
| 	switch (output_units.length) { | ||||
| 	case METERS: | ||||
| 		d = depth.mm / 1000.0; | ||||
| 		fmt = "%.1f"; | ||||
| 		break; | ||||
| 	case FEET: | ||||
| 		d = to_feet(depth); | ||||
| 		fmt = "%.0f"; | ||||
| 		break; | ||||
| 	} | ||||
| 	plot_text(gc, tro, sec, depth.mm, fmt, d); | ||||
| 	d = get_depth_units(entry->val, &decimals, NULL); | ||||
| 
 | ||||
| 	plot_text(gc, tro, sec, entry->val, "%.*f", decimals, d); | ||||
| } | ||||
| 
 | ||||
| static void plot_text_samples(struct graphics_context *gc, struct plot_info *pi) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue