Show
Ignore:
Timestamp:
02/05/09 19:46:29 (18 months ago)
Author:
tom
Message:

Revert the patch to add a show_page flag to the cairo renderer and
replace it with support for rendering to a cairo context rather than
a cairo surface.

When rendering to a surface a show_page is done, when rendering to a
context it is not so that multiple renders can be done, possibly with
modified scaling and/or translation.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/cairo_renderer.cpp

    r873 r874  
    466466   }; 
    467467 
    468    template <typename T> 
    469    cairo_renderer<T>::cairo_renderer(Map const& m, Cairo::RefPtr<Cairo::Surface> const& surface, unsigned offset_x, unsigned offset_y, bool show_page) 
    470       : feature_style_processor<cairo_renderer>(m), 
    471         m_(m), 
    472         surface_(surface), 
    473         context_(Cairo::Context::create(surface)), 
     468   cairo_renderer_base::cairo_renderer_base(Map const& m, Cairo::RefPtr<Cairo::Context> const& context, unsigned offset_x, unsigned offset_y) 
     469      : m_(m), 
     470        context_(context), 
    474471        t_(m.getWidth(),m.getHeight(),m.getCurrentExtent(),offset_x,offset_y), 
    475472        font_engine_(new freetype_engine()), 
     
    481478      std::clog << "scale=" << m.scale() << "\n"; 
    482479#endif 
    483         this->show_page = show_page; 
    484    } 
    485  
    486    template <typename T> 
    487    cairo_renderer<T>::~cairo_renderer() {} 
    488  
    489    template <typename T> 
    490    void cairo_renderer<T>::start_map_processing(Map const& map) 
     480   } 
     481 
     482   template <> 
     483   cairo_renderer<Cairo::Context>::cairo_renderer(Map const& m, Cairo::RefPtr<Cairo::Context> const& context, unsigned offset_x, unsigned offset_y) 
     484      : feature_style_processor<cairo_renderer>(m), 
     485        cairo_renderer_base(m,context,offset_x,offset_y) 
     486   { 
     487   } 
     488 
     489   template <> 
     490   cairo_renderer<Cairo::Surface>::cairo_renderer(Map const& m, Cairo::RefPtr<Cairo::Surface> const& surface, unsigned offset_x, unsigned offset_y) 
     491      : feature_style_processor<cairo_renderer>(m), 
     492        cairo_renderer_base(m,Cairo::Context::create(surface),offset_x,offset_y) 
     493   { 
     494   } 
     495 
     496   cairo_renderer_base::~cairo_renderer_base() {} 
     497 
     498   void cairo_renderer_base::start_map_processing(Map const& map) 
    491499   { 
    492500#ifdef MAPNIK_DEBUG 
     
    510518   } 
    511519 
    512    template <typename T> 
    513    void cairo_renderer<T>::end_map_processing(Map const& ) 
     520   template <> 
     521   void cairo_renderer<Cairo::Context>::end_map_processing(Map const& ) 
    514522   { 
    515523#ifdef MAPNIK_DEBUG 
    516524      std::clog << "end map processing\n"; 
    517525#endif 
    518       if (show_page) 
    519          context_->show_page(); 
    520    } 
    521  
    522    template <typename T> 
    523    void cairo_renderer<T>::start_layer_processing(Layer const& lay) 
     526   } 
     527 
     528   template <> 
     529   void cairo_renderer<Cairo::Surface>::end_map_processing(Map const& ) 
     530   { 
     531#ifdef MAPNIK_DEBUG 
     532      std::clog << "end map processing\n"; 
     533#endif 
     534      context_->show_page(); 
     535   } 
     536 
     537   void cairo_renderer_base::start_layer_processing(Layer const& lay) 
    524538   { 
    525539#ifdef MAPNIK_DEBUG 
     
    533547   } 
    534548 
    535    template <typename T> 
    536    void cairo_renderer<T>::end_layer_processing(Layer const&) 
     549   void cairo_renderer_base::end_layer_processing(Layer const&) 
    537550   { 
    538551#ifdef MAPNIK_DEBUG 
     
    541554   } 
    542555 
    543    template <typename T> 
    544    void cairo_renderer<T>::process(polygon_symbolizer const& sym, 
    545                                    Feature const& feature, 
    546                                    proj_transform const& prj_trans) 
     556   void cairo_renderer_base::process(polygon_symbolizer const& sym, 
     557                                     Feature const& feature, 
     558                                     proj_transform const& prj_trans) 
    547559   { 
    548560      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    574586   } 
    575587 
    576    template <typename T> 
    577    void cairo_renderer<T>::process(building_symbolizer const& sym, 
    578                                    Feature const& feature, 
    579                                    proj_transform const& prj_trans) 
     588   void cairo_renderer_base::process(building_symbolizer const& sym, 
     589                                     Feature const& feature, 
     590                                     proj_transform const& prj_trans) 
    580591   { 
    581592      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    678689    } 
    679690 
    680    template <typename T> 
    681    void cairo_renderer<T>::process(line_symbolizer const& sym, 
    682                                    Feature const& feature, 
    683                                    proj_transform const& prj_trans) 
     691   void cairo_renderer_base::process(line_symbolizer const& sym, 
     692                                     Feature const& feature, 
     693                                     proj_transform const& prj_trans) 
    684694   { 
    685695      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    714724   } 
    715725 
    716    template <typename T> 
    717    void cairo_renderer<T>::process(point_symbolizer const& sym, 
    718                                    Feature const& feature, 
    719                                    proj_transform const& prj_trans) 
     726   void cairo_renderer_base::process(point_symbolizer const& sym, 
     727                                     Feature const& feature, 
     728                                     proj_transform const& prj_trans) 
    720729   { 
    721730      boost::shared_ptr<ImageData32> const& data = sym.get_image(); 
     
    756765   } 
    757766 
    758    template <typename T> 
    759    void  cairo_renderer<T>::process(shield_symbolizer const& sym, 
    760                                     Feature const& feature, 
    761                                     proj_transform const& prj_trans) 
     767   void cairo_renderer_base::process(shield_symbolizer const& sym, 
     768                                     Feature const& feature, 
     769                                     proj_transform const& prj_trans) 
    762770   { 
    763771      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    862870   } 
    863871 
    864    template <typename T> 
    865    void  cairo_renderer<T>::process(line_pattern_symbolizer const& sym, 
    866                                     Feature const& feature, 
    867                                     proj_transform const& prj_trans) 
     872   void cairo_renderer_base::process(line_pattern_symbolizer const& sym, 
     873                                     Feature const& feature, 
     874                                     proj_transform const& prj_trans) 
    868875   { 
    869876      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    929936   } 
    930937 
    931    template <typename T> 
    932    void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym, 
    933                                    Feature const& feature, 
    934                                    proj_transform const& prj_trans) 
     938   void cairo_renderer_base::process(polygon_pattern_symbolizer const& sym, 
     939                                     Feature const& feature, 
     940                                     proj_transform const& prj_trans) 
    935941   { 
    936942      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    956962   } 
    957963 
    958    template <typename T> 
    959    void cairo_renderer<T>::process(raster_symbolizer const&, 
    960                                    Feature const& feature, 
    961                                    proj_transform const& prj_trans) 
     964   void cairo_renderer_base::process(raster_symbolizer const&, 
     965                                     Feature const& feature, 
     966                                     proj_transform const& prj_trans) 
    962967   { 
    963968      // TODO -- at the moment raster_symbolizer is an empty class 
     
    976981   } 
    977982 
    978    template <typename T> 
    979    void cairo_renderer<T>::process(markers_symbolizer const& sym, 
    980                                    Feature const& feature, 
    981                                    proj_transform const& prj_trans) 
    982    { 
    983    } 
    984  
    985    template <typename T> 
    986    void cairo_renderer<T>::process(text_symbolizer const& sym, 
    987                                    Feature const& feature, 
    988                                    proj_transform const& prj_trans) 
     983   void cairo_renderer_base::process(markers_symbolizer const& sym, 
     984                                     Feature const& feature, 
     985                                     proj_transform const& prj_trans) 
     986   { 
     987   } 
     988 
     989   void cairo_renderer_base::process(text_symbolizer const& sym, 
     990                                     Feature const& feature, 
     991                                     proj_transform const& prj_trans) 
    989992   { 
    990993      typedef coord_transform2<CoordTransform,geometry2d> path_type; 
     
    10521055      } 
    10531056   } 
     1057 
    10541058   template class cairo_renderer<Cairo::Surface>; 
     1059   template class cairo_renderer<Cairo::Context>; 
    10551060}