1# -*- coding: utf-8 -*-2# Copyright 2011 Takeshi KOMIYA3#4# Licensed under the Apache License, Version 2.0 (the "License");5# you may not use this file except in compliance with the License.6# You may obtain a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing, software11# distributed under the License is distributed on an "AS IS" BASIS,12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13# See the License for the specific language governing permissions and14# limitations under the License.1516import blockdiag.drawer17from blockdiag.utils import Box1819from rackdiag.metrics import DiagramMetrics202122class DiagramDraw(blockdiag.drawer.DiagramDraw):23 def create_metrics(self, *args, **kwargs):24 return DiagramMetrics(*args, **kwargs)2526 def _draw_elements(self, **kwargs):27 default_font = self.metrics.font_for(self.diagram)2829 for rack in self.diagram.racks:30 frame = self.metrics.cell(rack, use_padding=False).box31 self.drawer.rectangle(frame, fill='white',32 outline=self.diagram.linecolor)3334 for i in range(rack.colheight):35 box = self.metrics.racknumber(rack, i)36 number = "%d" % (i + 1)37 self.drawer.textarea(box, number, default_font, halign='right',38 fill=self.diagram.textcolor)3940 if rack.display_label:41 box = self.metrics.racklabel(rack)42 self.drawer.textarea(box, rack.display_label,43 self.metrics.font_for(rack),44 fill=rack.textcolor)4546 super(DiagramDraw, self)._draw_elements(**kwargs)4748 def _draw_background(self):49 # do not draw shadow of nodes on super()50 self.diagram.shadow_style = 'none'51 super(DiagramDraw, self)._draw_background()5253 # draw shadow of frame54 dx, dy = self.metrics.shadow_offset55 for rack in self.diagram.racks:56 frame = self.metrics.cell(rack, use_padding=False)57 shadow = Box(frame.x1 + dx, frame.y1 + dy,58 frame.x2 + dx, frame.y2 + dy)59 self.drawer.rectangle(shadow, fill=self.shadow, filter='blur')6061 def node(self, node, **kwargs):62 label, node.label = node.label, node.display_label63 super(DiagramDraw, self).node(node, **kwargs)64 node.label = label