diff --git a/src/map/draw-layer.c b/src/map/draw-layer.c index f8fe7d9..575f941 100644 --- a/src/map/draw-layer.c +++ b/src/map/draw-layer.c @@ -1,15 +1,12 @@ /* - * Code mainly taken from https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-path-layer.c - * This is a copy of the shumate-path-layer adjusted for the needs of PicPlanner + * Code mainly taken from: + * https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-path-layer.c + * https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-marker-layer.c + * This is a combination of the 'ShumatePathLayer' and 'ShumateMarkerLayer' classes adjusted for the needs of PicPlanner. */ #include "draw-layer.h" -#include -#include -#include -#include - static GdkRGBA DEFAULT_STROKE_COLOR = { 0.64, 0.0, 0.0, 1.0 }; typedef struct @@ -19,13 +16,15 @@ typedef struct double stroke_width; GList *nodes; + double *nodes_coordinates; + size_t nodes_len; } PicplannerDrawLayerPrivate; G_DEFINE_TYPE_WITH_PRIVATE (PicplannerDrawLayer, picplanner_draw_layer, SHUMATE_TYPE_LAYER); static void update_marker_visibility (PicplannerDrawLayer *layer, - PicplannerMarker *marker) + PicplannerMarker *marker) { ShumateViewport *viewport; ShumateMapSource *map_source; @@ -164,7 +163,7 @@ shumate_marker_layer_constructed (GObject *object) static void picplanner_draw_layer_snapshot (GtkWidget *widget, - GtkSnapshot *snapshot) + GtkSnapshot *snapshot) { PicplannerDrawLayer *self = (PicplannerDrawLayer *)widget; PicplannerDrawLayerPrivate *priv = picplanner_draw_layer_get_instance_private (self); @@ -232,6 +231,8 @@ picplanner_draw_layer_init (PicplannerDrawLayer *self) priv->stroke = TRUE; priv->stroke_width = 2.0; priv->nodes = NULL; + priv->nodes_coordinates = NULL; + priv->nodes_len = 0; priv->stroke_color = gdk_rgba_copy (&DEFAULT_STROKE_COLOR); } @@ -246,9 +247,9 @@ picplanner_draw_layer_new (ShumateViewport *viewport) } static void -position_notify (ShumateLocation *location, - GParamSpec *pspec, - PicplannerDrawLayer *layer) +position_notify (ShumateLocation *location, + GParamSpec *pspec, + PicplannerDrawLayer *layer) { (void) location; (void) pspec; @@ -274,7 +275,7 @@ add_node (PicplannerDrawLayer *layer, void picplanner_draw_layer_add_marker (PicplannerDrawLayer *layer, - PicplannerMarker *marker) + PicplannerMarker *marker) { g_return_if_fail (PICPLANNER_IS_DRAW_LAYER (layer)); g_return_if_fail (PICPLANNER_IS_MARKER (marker)); @@ -287,7 +288,7 @@ picplanner_draw_layer_add_marker (PicplannerDrawLayer *layer, void picplanner_draw_layer_add_node (PicplannerDrawLayer *layer, - double *location) + double *location) { g_return_if_fail (PICPLANNER_IS_DRAW_LAYER (layer)); @@ -336,8 +337,8 @@ picplanner_draw_layer_get_nodes (PicplannerDrawLayer *layer) void -picplanner_draw_layer_remove_node (PicplannerDrawLayer *layer, - double *location) +picplanner_draw_layer_remove_node (PicplannerDrawLayer *layer, + double *location) { PicplannerDrawLayerPrivate *priv = picplanner_draw_layer_get_instance_private (layer); @@ -352,9 +353,9 @@ picplanner_draw_layer_remove_node (PicplannerDrawLayer *layer, void -picplanner_draw_layer_insert_node (PicplannerDrawLayer *layer, - double *location, - guint position) +picplanner_draw_layer_insert_node (PicplannerDrawLayer *layer, + double *location, + guint position) { g_return_if_fail (PICPLANNER_IS_DRAW_LAYER (layer)); @@ -364,7 +365,7 @@ picplanner_draw_layer_insert_node (PicplannerDrawLayer *layer, void picplanner_draw_layer_set_stroke_color (PicplannerDrawLayer *layer, - const GdkRGBA *color) + const GdkRGBA *color) { PicplannerDrawLayerPrivate *priv = picplanner_draw_layer_get_instance_private (layer); @@ -395,7 +396,7 @@ picplanner_draw_layer_get_stroke_color (PicplannerDrawLayer *layer) void picplanner_draw_layer_set_stroke (PicplannerDrawLayer *layer, - gboolean value) + gboolean value) { PicplannerDrawLayerPrivate *priv = picplanner_draw_layer_get_instance_private (layer); @@ -420,7 +421,7 @@ picplanner_draw_layer_get_stroke (PicplannerDrawLayer *layer) void picplanner_draw_layer_set_stroke_width (PicplannerDrawLayer *layer, - double value) + double value) { PicplannerDrawLayerPrivate *priv = picplanner_draw_layer_get_instance_private (layer); diff --git a/src/map/draw-layer.h b/src/map/draw-layer.h index 0d7c218..b527d3f 100644 --- a/src/map/draw-layer.h +++ b/src/map/draw-layer.h @@ -1,14 +1,16 @@ /* - * Code mainly taken from https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-path-layer.h - * This is a copy of the shumate-path-layer adjusted for the needs of PicPlanner + * Code mainly taken from: + * https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-path-layer.h + * https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-marker-layer.h + * This is a combination of the 'ShumatePathLayer' and 'ShumateMarkerLayer' classes adjusted for the needs of PicPlanner. */ #ifndef PICPLANNER_DRAW_LAYER_H #define PICPLANNER_DRAW_LAYER_H +#include #include -#include -#include + #include "marker.h" G_BEGIN_DECLS @@ -21,41 +23,53 @@ struct _PicplannerDrawLayerClass ShumateLayerClass parent_class; }; -PicplannerDrawLayer *picplanner_draw_layer_new (ShumateViewport *viewport); +PicplannerDrawLayer +*picplanner_draw_layer_new (ShumateViewport *viewport); void picplanner_draw_layer_add_marker (PicplannerDrawLayer *layer, - PicplannerMarker *marker); + PicplannerMarker *marker); -void picplanner_draw_layer_add_node (PicplannerDrawLayer *layer, - double *location); +void +picplanner_draw_layer_add_node (PicplannerDrawLayer *layer, + double *location); -void picplanner_draw_layer_remove_node (PicplannerDrawLayer *layer, - double *location); +void +picplanner_draw_layer_remove_node (PicplannerDrawLayer *layer, + double *location); -void picplanner_draw_layer_remove_all (PicplannerDrawLayer *layer); +void +picplanner_draw_layer_remove_all (PicplannerDrawLayer *layer); -void picplanner_draw_layer_insert_node (PicplannerDrawLayer *layer, - double *location, - guint position); +void +picplanner_draw_layer_insert_node (PicplannerDrawLayer *layer, + double *location, + guint position); -GList *picplanner_draw_layer_get_nodes (PicplannerDrawLayer *layer); +GList +*picplanner_draw_layer_get_nodes (PicplannerDrawLayer *layer); -GdkRGBA *picplanner_draw_layer_get_stroke_color (PicplannerDrawLayer *layer); +GdkRGBA +*picplanner_draw_layer_get_stroke_color (PicplannerDrawLayer *layer); -void picplanner_draw_layer_set_stroke_color (PicplannerDrawLayer *layer, - const GdkRGBA *color); +void +picplanner_draw_layer_set_stroke_color (PicplannerDrawLayer *layer, + const GdkRGBA *color); -gboolean picplanner_draw_layer_get_stroke (PicplannerDrawLayer *layer); +gboolean +picplanner_draw_layer_get_stroke (PicplannerDrawLayer *layer); -void picplanner_draw_layer_set_stroke (PicplannerDrawLayer *layer, - gboolean value); +void +picplanner_draw_layer_set_stroke (PicplannerDrawLayer *layer, + gboolean value); -double picplanner_draw_layer_get_stroke_width (PicplannerDrawLayer *layer); +double +picplanner_draw_layer_get_stroke_width (PicplannerDrawLayer *layer); -void picplanner_draw_layer_set_stroke_width (PicplannerDrawLayer *layer, - double value); +void +picplanner_draw_layer_set_stroke_width (PicplannerDrawLayer *layer, + double value); G_END_DECLS diff --git a/src/map/marker.c b/src/map/marker.c index 6f2b926..de1e899 100644 --- a/src/map/marker.c +++ b/src/map/marker.c @@ -1,11 +1,8 @@ /* * Code mainly taken from https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-marker.c - * This is a copy of the shumate-path-layer adjusted for the needs of PicPlanner + * This is a copy of the 'ShumateMarker' class adjusted for the needs of PicPlanner */ -#include -#include -#include #include "marker.h" typedef struct @@ -26,8 +23,8 @@ static GtkBuildableIface *parent_buildable_iface; void picplanner_marker_set_location (PicplannerMarker *marker, - double x, - double y) + double x, + double y) { PicplannerMarkerPrivate *priv = picplanner_marker_get_instance_private (marker); @@ -55,9 +52,9 @@ picplanner_marker_get_y (PicplannerMarker *marker) static void picplanner_marker_add_child (GtkBuildable *buildable, - GtkBuilder *builder, - GObject *child, - const char *type) + GtkBuilder *builder, + GObject *child, + const char *type) { if (GTK_IS_WIDGET (child)) picplanner_marker_set_child (PICPLANNER_MARKER (buildable), GTK_WIDGET (child)); @@ -123,7 +120,7 @@ picplanner_marker_get_child (PicplannerMarker *marker) void picplanner_marker_set_child (PicplannerMarker *marker, - GtkWidget *child) + GtkWidget *child) { PicplannerMarkerPrivate *priv = picplanner_marker_get_instance_private (marker); diff --git a/src/map/marker.h b/src/map/marker.h index 7b09597..771383a 100644 --- a/src/map/marker.h +++ b/src/map/marker.h @@ -1,13 +1,11 @@ /* * Code mainly taken from https://gitlab.gnome.org/GNOME/libshumate/-/blob/main/shumate/shumate-marker.h - * This is a copy of the shumate-path-layer adjusted for the needs of PicPlanner + * This is a copy of the 'ShumateMarker' class adjusted for the needs of PicPlanner */ #ifndef PICPLANNER_MARKER_H #define PICPLANNER_MARKER_H -#include -#include #include G_BEGIN_DECLS @@ -37,8 +35,9 @@ PicplannerMarker GtkWidget *picplanner_marker_get_child (PicplannerMarker *marker); -void picplanner_marker_set_child (PicplannerMarker *marker, - GtkWidget *child); +void +picplanner_marker_set_child (PicplannerMarker *marker, + GtkWidget *child); G_END_DECLS diff --git a/src/window/overview-page/overview-view.c b/src/window/overview-page/overview-view.c index d24520a..66e4f8a 100644 --- a/src/window/overview-page/overview-view.c +++ b/src/window/overview-page/overview-view.c @@ -1,3 +1,9 @@ + +/* + * TODO: + * - Catching Azimuth 0 deg errors + */ + #include "overview-view.h" #include "calculations/calculations_transformations.h" #include "calculations/calculations_sun.h" @@ -6,38 +12,42 @@ #include "map/draw-layer.h" #include "map/marker.h" - #define LENGTH_SCALE_FACTOR 0.38 static guint signal_input_changed; -/* - * TODO: Catching Azimuth 0 deg errors - */ - - struct _PicplannerOverview { GtkBox parent_instance; GtkWidget *calendar; GtkWidget *calendar_popover; GtkWidget *calendar_button; + GtkWidget *spin_button_hour; GtkWidget *spin_button_minute; + GtkWidget *label_sun_rise; GtkWidget *label_sun_set; GtkWidget *label_moon_rise; GtkWidget *label_moon_set; GtkWidget *label_milky_way_rise; GtkWidget *label_milky_way_set; + GtkWidget *expander_date_time; GtkWidget *expander_basic_information; ShumateSimpleMap *map; ShumateViewport *viewport; - PicplannerMarker *pp_marker_center; PicplannerDrawLayer *pp_layer_center; + PicplannerDrawLayer *pp_layer_sun; + PicplannerDrawLayer *pp_layer_moon; + PicplannerDrawLayer *pp_layer_milkyway; + + PicplannerMarker *pp_marker_center; + PicplannerMarker *pp_marker_sun; + PicplannerMarker *pp_marker_moon; + PicplannerMarker *pp_marker_milkyway; GDateTime *date_time; @@ -85,27 +95,6 @@ picplanner_overview_set_current_coordinates_sun (PicplannerOverview *overview, date_time_rise = g_date_time_add_minutes (overview->date_time, rise_upper_set_index[0]*24*60/NUM_DATA_POINTS-12*60); date_time_set = g_date_time_add_minutes (overview->date_time, rise_upper_set_index[2]*24*60/NUM_DATA_POINTS-12*60); - /* - GDateTime *from_time; - GDateTime *to_time; - from_time = g_date_time_add_minutes (overview->date_time, -12*60); - to_time = g_date_time_add_minutes (overview->date_time, 12*60); - - * TODO: With the method of the calculations centered around the chosen time - * some unintuitive behaviour can occure - g_print ("From: %02d.%02d.%02d %02d:%02d, To: %02d.%02d.%02d %02d:%02d\n", - g_date_time_get_day_of_month (from_time), - g_date_time_get_month (from_time), - g_date_time_get_year (from_time), - g_date_time_get_hour (from_time), - g_date_time_get_minute (from_time), - g_date_time_get_day_of_month (to_time), - g_date_time_get_month (to_time), - g_date_time_get_year (to_time), - g_date_time_get_hour (to_time), - g_date_time_get_minute (to_time)); - */ - char_sun_rise = g_strdup_printf ("%02d:%02d", g_date_time_get_hour (date_time_rise), g_date_time_get_minute (date_time_rise)); @@ -197,17 +186,71 @@ picplanner_overview_update_map_center (PicplannerOverview *overview, gtk_image_set_icon_size (GTK_IMAGE (image_center), GTK_ICON_SIZE_LARGE); shumate_viewport_location_to_widget_coords (overview->viewport, - GTK_WIDGET (overview->map), - latitude, longitude, - &x, &y); + GTK_WIDGET (overview->map), + latitude, longitude, + &x, &y); picplanner_marker_set_location (overview->pp_marker_center, x, y); picplanner_marker_set_child (overview->pp_marker_center, image_center); picplanner_draw_layer_add_marker (overview->pp_layer_center, overview->pp_marker_center); +} - g_print ("Picplanner Marker x: %f, y: %f\n", - picplanner_marker_get_x (overview->pp_marker_center), - picplanner_marker_get_y (overview->pp_marker_center)); +void +picplanner_overview_update_map_sun (PicplannerOverview *overview, + double latitude, + double longitude, + double *array_coordinates_sun, + int *rise_upper_set_sun) +{ + int width, height, min_size; + + double x, y; + double x_sun, y_sun; + double x_sunrise, y_sunrise; + double x_sunset, y_sunset; + double azimuth_sun, azimuth_sunrise, azimuth_sunset; + + gboolean visible_sun = TRUE; + + GtkWidget *image_sun; + + picplanner_draw_layer_remove_all (overview->pp_layer_sun); + + if (array_coordinates_sun[NUM_DATA_POINTS+1]<0) + visible_sun = FALSE; + image_sun = gtk_image_new_from_icon_name ("sun"); + gtk_image_set_icon_size (GTK_IMAGE (image_sun), GTK_ICON_SIZE_LARGE); + gtk_widget_set_visible (image_sun, visible_sun); + + shumate_viewport_location_to_widget_coords (overview->viewport, + GTK_WIDGET (overview->map), + latitude, longitude, + &x, &y); + + width = gtk_widget_get_allocated_width (GTK_WIDGET (overview->map)); + height = gtk_widget_get_allocated_height (GTK_WIDGET (overview->map)); + if (widthoverview_box), - latitude, - longitude); + latitude, + longitude); g_free (rise_upper_set_index_sun);