function render(Frame $frame)
 {
     $style = $frame->get_style();
     $line_height = $style->length_in_pt($style->line_height, $frame->get_containing_block("w"));
     // Handle list-style-image
     if ($style->list_style_image != "none") {
         list($x, $y) = $frame->get_position();
         $w = $frame->get_width();
         $h = $frame->get_height();
         $x += $w / 2;
         $y += $line_height / 2 - $h / 2;
         $this->_canvas->image($frame->get_image_url(), $frame->get_image_ext(), $x, $y, $w, $h);
     } else {
         $bullet_style = $style->list_style_type;
         $bullet_size = List_Bullet_Frame_Decorator::BULLET_SIZE;
         $fill = false;
         switch ($bullet_style) {
             default:
             case "disc":
                 $fill = true;
             case "circle":
                 if (!$fill) {
                     $fill = false;
                 }
                 list($x, $y) = $frame->get_position();
                 $x += $bullet_size / 2 + List_Bullet_Frame_Decorator::BULLET_PADDING;
                 $y += $line_height - $bullet_size;
                 $r = $bullet_size / 2;
                 $this->_canvas->circle($x, $y, $r, $style->color, 0.2, null, $fill);
                 break;
             case "square":
                 list($x, $y) = $frame->get_position();
                 $w = $bullet_size;
                 $x += List_Bullet_Frame_Decorator::BULLET_PADDING;
                 $y += $line_height - $w - List_Bullet_Frame_Decorator::BULLET_PADDING;
                 $this->_canvas->filled_rectangle($x, $y, $w, $w, $style->color);
                 break;
         }
     }
 }