Changeset 669
- Timestamp:
- 03/17/08 17:04:22 (8 months ago)
- Files:
-
- 1 modified
-
trunk/src/cairo_renderer.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/cairo_renderer.cpp
r656 r669 82 82 delete [] data_; 83 83 } 84 85 void set_matrix(Cairo::Matrix const& matrix) 86 { 87 pattern_->set_matrix(matrix); 88 } 84 89 85 90 void set_origin(double x, double y) 86 91 { 87 92 Cairo::Matrix matrix; 88 93 89 94 pattern_->get_matrix(matrix); 90 95 91 96 matrix.x0 = -x; 92 97 matrix.y0 = -y; 93 98 94 99 pattern_->set_matrix(matrix); 95 100 } 96 97 void set_angle(double angle) 98 { 99 Cairo::Matrix matrix; 100 101 pattern_->get_matrix(matrix); 102 103 cairo_matrix_invert(&matrix); 104 105 matrix.xx = cos(angle); 106 matrix.xy = sin(angle); 107 matrix.yx = -sin(angle); 108 matrix.yy = cos(angle); 109 110 cairo_matrix_invert(&matrix); 111 112 pattern_->set_matrix(matrix); 113 } 114 101 115 102 void set_extend(Cairo::Extend extend) 116 103 { … … 814 801 proj_transform const& prj_trans) 815 802 { 816 #ifdef CAIRO_LINE_PATTERN803 //#ifdef CAIRO_LINE_PATTERN 817 804 typedef coord_transform2<CoordTransform,geometry2d> path_type; 818 805 … … 847 834 else if (cm == SEG_LINETO) 848 835 { 849 double angle = atan2(y0 - y, x - x0); 836 double dx = x - x0; 837 double dy = y - y0; 838 double angle = atan2(dy, dx); 850 839 double offset = fmod(length, width); 851 double xoff = height / 2.0 * sin(angle) - offset * cos(angle); 852 double yoff = height / 2.0 * cos(angle) + offset * sin(angle); 853 854 pattern.set_origin(x0 + xoff, y0 - yoff); 855 pattern.set_angle(angle); 840 841 Cairo::Matrix matrix; 842 cairo_matrix_init_identity(&matrix); 843 cairo_matrix_translate(&matrix,x0,y0); 844 cairo_matrix_rotate(&matrix,angle); 845 cairo_matrix_translate(&matrix,-offset,0.5*height); 846 cairo_matrix_invert(&matrix); 847 848 pattern.set_matrix(matrix); 849 856 850 context.set_pattern(pattern); 857 851 858 852 context.move_to(x0, y0); 859 853 context.line_to(x, y); … … 868 862 } 869 863 } 870 #endif864 //#endif 871 865 } 872 866
