def test_vertical_offset_works(self): surface, cairo_context = self._create_real_surface( 'vertical_offset_works.svg' ) layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('Hi from Παν語') line_string = LineString([[5, 40], [45, 40], [90, 80]]) for vertical_offset in [-13, 0, 13]: offset_linestring, _ = parallel_offset_with_matching_direction( line_string, vertical_offset, side=Side.LEFT ) debug.draw_line_string(cairo_context, offset_linestring) red = max(0.0, vertical_offset / 13) green = max(0.0, -vertical_offset / 13) cairo_context.set_source_rgba(red, green, 0, 0.2) cairo_context.stroke() text_path = TextPath(line_string, layout) text_path.vertical_offset = vertical_offset cairo_context.set_source_rgb(red, green, 0) text_path.draw(cairo_context) surface.finish()
def test_vertical_offset_fails_on_invalid_offset_shape(self): surface, cairo_context = self._create_void_surface() layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('Hi from Παν語') line_string = LineString([[0, 0], [40, 0], [40, 40], [0, 40], [0, 0]]) text_path = TextPath(line_string, layout) text_path.vertical_offset = -10 with self.assertRaises(RuntimeError): text_path.draw(cairo_context)
def test_draw(self): surface, cairo_context = self._create_real_surface('draw.svg') layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('Hi from Παν語') line_string = LineString([[10, 30], [90, 30]]) text_path = TextPath(line_string, layout) text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() line_string = LineString([[10, 50], [50, 50], [90, 90]]) text_path = TextPath(line_string, layout) text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() surface.finish()
def test_compute_baseline(self): surface, cairo_context = self._create_real_surface( 'compute_baseline.svg' ) layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('<span font="8">Hi from Παν語</span>') line_string = LineString([[0, 10], [50, 20], [100, 10]]) text_path = TextPath(line_string, layout) text_path.alignment = Alignment.CENTER text_path.draw(cairo_context) baseline = text_path.compute_baseline() debug.draw_line_string(cairo_context, baseline) cairo_context.stroke() assert isinstance(baseline, LineString) assert baseline.length > 0 assert baseline.length < line_string.length surface.finish()
def test_side(self): surface, cairo_context = self._create_real_surface('side.svg') layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('Hi from Παν語') line_string = LineString([[10, 30], [50, 30], [90, 70]]) text_path = TextPath(line_string, layout) text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() line_string = translate(line_string, 0, 20) text_path = TextPath(line_string, layout) text_path.side = Side.RIGHT text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() surface.finish()
def test_alignment(self): surface, cairo_context = self._create_real_surface( 'alignment.svg', 300, 100 ) layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('<span font="8">Hi from Παν語</span>') start_offsets = [-10, 0, 10] alignments = [Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT] for start_offset_index, start_offset in enumerate(start_offsets): for alignment_index, alignment in enumerate(alignments): line_string = LineString([ [5, 33 + alignment_index * 20], [30, 23 + alignment_index * 20], [50, 20 + alignment_index * 20], [70, 23 + alignment_index * 20], [95, 33 + alignment_index * 20] ]) line_string = translate( line_string, start_offset_index * 100, 0 ) text_path = TextPath(line_string, layout) text_path.alignment = alignment text_path.start_offset = start_offset cairo_context.set_source_rgb(0, 0, 0) text_path.draw(cairo_context) cairo_context.set_source_rgba(0, 0, 0, 0.2) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() surface.finish()
def test_alignment_when_no_space(self): surface, cairo_context = self._create_real_surface( 'alignment_with_no_space.svg' ) layout = pangocairocffi.create_layout(cairo_context) layout.set_markup('Hi from Παν語') line_string = LineString([[10, 30], [90, 30]]) text_path = TextPath(line_string, layout) text_path.alignment = Alignment.CENTER text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() line_string = translate(line_string, 0, 25) text_path = TextPath(line_string, layout) text_path.alignment = Alignment.RIGHT text_path.draw(cairo_context) debug.draw_line_string(cairo_context, line_string) cairo_context.stroke() surface.finish()