114 /** main actor **/ |
114 /** main actor **/ |
115 |
115 |
116 /* internal messages */ |
116 /* internal messages */ |
117 |
117 |
118 private case class Resize(font_family: String, font_size: Int) |
118 private case class Resize(font_family: String, font_size: Int) |
119 private case class Render(body: List[XML.Tree]) |
119 private case class Render(body: XML.Body) |
120 private case object Refresh |
120 private case object Refresh |
121 |
121 |
122 private val main_actor = actor { |
122 private val main_actor = actor { |
123 |
123 |
124 /* internal state */ |
124 /* internal state */ |
125 |
125 |
126 var current_font_metrics: FontMetrics = null |
126 var current_font_metrics: FontMetrics = null |
127 var current_font_family = "" |
127 var current_font_family = "" |
128 var current_font_size: Int = 0 |
128 var current_font_size: Int = 0 |
129 var current_margin: Int = 0 |
129 var current_margin: Int = 0 |
130 var current_body: List[XML.Tree] = Nil |
130 var current_body: XML.Body = Nil |
131 |
131 |
132 def resize(font_family: String, font_size: Int) |
132 def resize(font_family: String, font_size: Int) |
133 { |
133 { |
134 val font = new Font(font_family, Font.PLAIN, lobo_px(raw_px(font_size))) |
134 val font = new Font(font_family, Font.PLAIN, lobo_px(raw_px(font_size))) |
135 val (font_metrics, margin) = |
135 val (font_metrics, margin) = |
150 } |
150 } |
151 } |
151 } |
152 |
152 |
153 def refresh() { render(current_body) } |
153 def refresh() { render(current_body) } |
154 |
154 |
155 def render(body: List[XML.Tree]) |
155 def render(body: XML.Body) |
156 { |
156 { |
157 current_body = body |
157 current_body = body |
158 val html_body = |
158 val html_body = |
159 current_body.flatMap(div => |
159 current_body.flatMap(div => |
160 Pretty.formatted(List(div), current_margin, Pretty.font_metric(current_font_metrics)) |
160 Pretty.formatted(List(div), current_margin, Pretty.font_metric(current_font_metrics)) |
188 |
188 |
189 /* external methods */ |
189 /* external methods */ |
190 |
190 |
191 def resize(font_family: String, font_size: Int) { main_actor ! Resize(font_family, font_size) } |
191 def resize(font_family: String, font_size: Int) { main_actor ! Resize(font_family, font_size) } |
192 def refresh() { main_actor ! Refresh } |
192 def refresh() { main_actor ! Refresh } |
193 def render(body: List[XML.Tree]) { main_actor ! Render(body) } |
193 def render(body: XML.Body) { main_actor ! Render(body) } |
194 } |
194 } |