Project

General

Profile

Patch #12730 » Fix-PDF-output-of-Gantt-diagram-for-small-tickets.patch

Patch to fix PDF output of Gantt diagram with small ticket durations - Tobias Droste, 2013-01-05 09:29

View differences:

lib/redmine/helpers/gantt.rb
790 790

  
791 791
      def pdf_task(params, coords, options={})
792 792
        height = options[:height] || 2
793

  
793 794
        # Renders the task bar, with progress and late
794 795
        if coords[:bar_start] && coords[:bar_end]
795
          params[:pdf].SetY(params[:top] + 1.5)
796
          params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
796
          top = params[:top] + 1.5
797
          width = params[:subject_width] + coords[:bar_start]
798

  
799
          length = coords[:bar_end] - coords[:bar_start]
800
          if length <= 0
801
            length = 1
802
          end
803
          params[:pdf].SetY(top)
804
          params[:pdf].SetX(width)
797 805
          params[:pdf].SetFillColor(200, 200, 200)
798
          params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
806
          params[:pdf].RDMCell(length, height, "", 0, 0, "", 1)
807

  
799 808
          if coords[:bar_late_end]
800
            params[:pdf].SetY(params[:top] + 1.5)
801
            params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
809
            length = coords[:bar_late_end] - coords[:bar_start]
810
            if length <= 0
811
              length = 1
812
            end
813
            params[:pdf].SetY(top)
814
            params[:pdf].SetX(width)
802 815
            params[:pdf].SetFillColor(255, 100, 100)
803
            params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
816
            params[:pdf].RDMCell(length, height, "", 0, 0, "", 1)
804 817
          end
818

  
805 819
          if coords[:bar_progress_end]
806
            params[:pdf].SetY(params[:top] + 1.5)
807
            params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
820
            length = coords[:bar_progress_end] - coords[:bar_start]
821
            if length <= 0
822
              length = 1
823
            end
824
            params[:pdf].SetY(top)
825
            params[:pdf].SetX(width)
808 826
            params[:pdf].SetFillColor(90, 200, 90)
809
            params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
827
            params[:pdf].RDMCell(length, height, "", 0, 0, "", 1)
810 828
          end
811 829
        end
830

  
812 831
        # Renders the markers
813 832
        if options[:markers]
814 833
          if coords[:start]
......
824 843
            params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
825 844
          end
826 845
        end
846

  
827 847
        # Renders the label on the right
828 848
        if options[:label]
829 849
          params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
......
837 857
        if coords[:bar_start] && coords[:bar_end]
838 858
          params[:image].fill('#aaa')
839 859
          params[:image].rectangle(params[:subject_width] + coords[:bar_start],
840
                                   params[:top],
841
                                   params[:subject_width] + coords[:bar_end],
842
                                   params[:top] - height)
860
          params[:top],
861
          params[:subject_width] + coords[:bar_end],
862
          params[:top] - height)
843 863
          if coords[:bar_late_end]
844 864
            params[:image].fill('#f66')
845 865
            params[:image].rectangle(params[:subject_width] + coords[:bar_start],
846
                                     params[:top],
847
                                     params[:subject_width] + coords[:bar_late_end],
848
                                     params[:top] - height)
866
            params[:top],
867
            params[:subject_width] + coords[:bar_late_end],
868
            params[:top] - height)
849 869
          end
850 870
          if coords[:bar_progress_end]
851 871
            params[:image].fill('#00c600')
852 872
            params[:image].rectangle(params[:subject_width] + coords[:bar_start],
853
                                     params[:top],
854
                                     params[:subject_width] + coords[:bar_progress_end],
855
                                     params[:top] - height)
873
            params[:top],
874
            params[:subject_width] + coords[:bar_progress_end],
875
            params[:top] - height)
856 876
          end
857 877
        end
858 878
        # Renders the markers
......
874 894
        if options[:label]
875 895
          params[:image].fill('black')
876 896
          params[:image].text(params[:subject_width] + (coords[:bar_end] || 0) + 5,
877
                              params[:top] + 1,
878
                              options[:label])
897
          params[:top] + 1,
898
          options[:label])
879 899
        end
880 900
      end
881 901
    end
(3-3/4)