Diff of /trunk/src/osm-gps-map-osd-classic.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 103 by harbaum, Wed Sep 9 11:50:50 2009 UTC revision 105 by harbaum, Wed Sep 9 19:57:45 2009 UTC
# Line 25  Line 25 
25  /* OSD_DIAMETER */  /* OSD_DIAMETER */
26  /* OSD_X, OSD_Y */  /* OSD_X, OSD_Y */
27    
28  #ifndef OSD_SCALE_FONT_SIZE  #define OSD_CROSSHAIR
 #define OSD_SCALE_FONT_SIZE 12  
 #endif  
 #define OSD_SCALE_W   (10*OSD_SCALE_FONT_SIZE)  
 #define OSD_SCALE_H   (5*OSD_SCALE_FONT_SIZE/2)  
29    
30  #ifndef USE_CAIRO  #ifndef USE_CAIRO
31  #error "OSD control display lacks a non-cairo implementation!"  #error "OSD control display lacks a non-cairo implementation!"
# Line 50  typedef struct { Line 46  typedef struct {
46      int scale_zoom;      int scale_zoom;
47  #endif  #endif
48    
49    #ifdef OSD_CROSSHAIR
50        cairo_surface_t *crosshair;
51    #endif
52    
53  #ifdef OSD_SOURCE_SEL  #ifdef OSD_SOURCE_SEL
54      /* values to handle the "source" menu */      /* values to handle the "source" menu */
55      cairo_surface_t *map_source;      cairo_surface_t *map_source;
# Line 729  osd_zoom_labels(cairo_t *cr, gint x, gin Line 729  osd_zoom_labels(cairo_t *cr, gint x, gin
729      cairo_line_to (cr, x + Z_RIGHT + Z_LEN, y + Z_MID);      cairo_line_to (cr, x + Z_RIGHT + Z_LEN, y + Z_MID);
730  }  }
731    
732    #ifdef OSD_CROSSHAIR
733    
734    #ifndef OSD_CROSSHAIR_RADIUS
735    #define OSD_CROSSHAIR_RADIUS 20
736    #endif
737    
738    #define OSD_CROSSHAIR_W  (OSD_CROSSHAIR_RADIUS*2)
739    #define OSD_CROSSHAIR_H  (OSD_CROSSHAIR_RADIUS*2)
740    
741    static void
742    osd_render_crosshair(osm_gps_map_osd_t *osd)
743    {
744        osd_priv_t *priv = (osd_priv_t*)osd->priv;
745    
746        /* first fill with transparency */
747        cairo_t *cr = cairo_create(priv->crosshair);
748        cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
749        //    cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.0);
750        cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.2);
751        cairo_paint(cr);
752        cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
753    
754        cairo_destroy(cr);
755    }
756    #endif
757    
758    #ifdef OSD_SCALE
759    
760    #ifndef OSD_SCALE_FONT_SIZE
761    #define OSD_SCALE_FONT_SIZE 12
762    #endif
763    #define OSD_SCALE_W   (10*OSD_SCALE_FONT_SIZE)
764    #define OSD_SCALE_H   (5*OSD_SCALE_FONT_SIZE/2)
765    
766  /* various parameters used to create the scale */  /* various parameters used to create the scale */
767  #define OSD_SCALE_H2   (OSD_SCALE_H/2)  #define OSD_SCALE_H2   (OSD_SCALE_H/2)
768  #define OSD_SCALE_TICK (2*OSD_SCALE_FONT_SIZE/3)  #define OSD_SCALE_TICK (2*OSD_SCALE_FONT_SIZE/3)
# Line 863  osd_render_scale(osm_gps_map_osd_t *osd) Line 897  osd_render_scale(osm_gps_map_osd_t *osd)
897    
898      cairo_destroy(cr);      cairo_destroy(cr);
899  }  }
900    #endif
901    
902  static void  static void
903  osd_render(osm_gps_map_osd_t *osd)  osd_render(osm_gps_map_osd_t *osd)
# Line 955  osd_render(osm_gps_map_osd_t *osd) Line 990  osd_render(osm_gps_map_osd_t *osd)
990  #ifdef OSD_SCALE  #ifdef OSD_SCALE
991      osd_render_scale(osd);      osd_render_scale(osd);
992  #endif  #endif
993    
994    #ifdef OSD_CROSSHAIR
995        osd_render_crosshair(osd);
996    #endif
997  }  }
998    
999  static void  static void
# Line 983  osd_draw(osm_gps_map_osd_t *osd, GdkDraw Line 1022  osd_draw(osm_gps_map_osd_t *osd, GdkDraw
1022          priv->scale_zoom = -1;          priv->scale_zoom = -1;
1023  #endif  #endif
1024    
1025    #ifdef OSD_CROSSHAIR
1026            priv->crosshair =
1027                cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
1028                                           OSD_CROSSHAIR_W, OSD_CROSSHAIR_H);
1029    #endif
1030    
1031          /* ... and render it */          /* ... and render it */
1032          osd_render(osd);          osd_render(osd);
1033      }      }
# Line 1032  osd_draw(osm_gps_map_osd_t *osd, GdkDraw Line 1077  osd_draw(osm_gps_map_osd_t *osd, GdkDraw
1077      cairo_paint(cr);      cairo_paint(cr);
1078  #endif  #endif
1079    
1080    #ifdef OSD_CROSSHAIR
1081        x = (osd->widget->allocation.width - OSD_CROSSHAIR_W)/2;
1082        y = (osd->widget->allocation.height - OSD_CROSSHAIR_H)/2;
1083    
1084        cairo_set_source_surface(cr, priv->crosshair, x, y);
1085        cairo_paint(cr);
1086    #endif
1087    
1088      cairo_destroy(cr);      cairo_destroy(cr);
1089  }  }
1090    
# Line 1056  osd_free(osm_gps_map_osd_t *osd) Line 1109  osd_free(osm_gps_map_osd_t *osd)
1109           cairo_surface_destroy(priv->scale);           cairo_surface_destroy(priv->scale);
1110  #endif  #endif
1111    
1112    #ifdef OSD_CROSSHAIR
1113        if (priv->crosshair)
1114             cairo_surface_destroy(priv->crosshair);
1115    #endif
1116    
1117      g_free(priv);      g_free(priv);
1118  }  }
1119    

Legend:
Removed from v.103  
changed lines
  Added in v.105