diff --git a/sim/fakes/ctx.py b/sim/fakes/ctx.py
index 925271793f7113c333034b43daec7040721ab1a6..496614c8d8615d71320497781658c6d516c77411 100644
--- a/sim/fakes/ctx.py
+++ b/sim/fakes/ctx.py
@@ -106,9 +106,11 @@ class Context:
     END = "end"
     MIDDLE = "middle"
     BEVEL = "bevel"
+    NONE = "none"
 
     def __init__(self, _ctx):
         self._ctx = _ctx
+        self._font_size = 0
 
     @property
     def image_smoothing(self):
@@ -152,10 +154,11 @@ class Context:
 
     @property
     def font_size(self):
-        return None
+        return self._font_size
 
     @font_size.setter
     def font_size(self, v):
+        self._font_size = v
         self._emit(f"fontSize {v:.3f}")
 
     @property
@@ -166,23 +169,34 @@ class Context:
     def global_alpha(self, v):
         self._emit(f"globalAlpha {v:.3f}")
 
+    @property
+    def x(self):
+        return 0
+
+    @property
+    def y(self):
+        return 0
+
     def _emit(self, text):
         _wasm.ctx_parse(self._ctx, text)
 
+    def logo(self, x, y, r):
+        return self
+
     def move_to(self, x, y):
-        self._emit(f"moveTo {int(x)} {int(y)}")
+        self._emit(f"moveTo {x:.3f} {y:.3f}")
         return self
 
     def curve_to(self, a, b, c, d, e, f):
-        self._emit(f"curveTo {int(a)} {int(b)} {int(c)} {int(d)}")
+        self._emit(f"curveTo {a:.3f} {b:.3f} {c:.3f} {d:.3f} {e:.3f} {f:.3f}")
         return self
 
     def rel_move_to(self, x, y):
-        self._emit(f"relMoveTo {int(x)} {int(y)}")
+        self._emit(f"relMoveTo {x:.3f} {y:.3f}")
         return self
 
     def rel_curve_to(self, a, b, c, d, e, f):
-        self._emit(f"relCurveTo {int(a)} {int(b)} {int(c)} {int(d)}")
+        self._emit(f"relCurveTo {a:.3f} {b:.3f} {c:.3f} {d:.3f} {e:.3f} {f:.3f}")
         return self
 
     def close_path(self):
@@ -190,7 +204,7 @@ class Context:
         return self
 
     def translate(self, x, y):
-        self._emit(f"translate {int(x)} {int(y)}")
+        self._emit(f"translate {x:.3f} {y:.3f}")
         return self
 
     def scale(self, x, y):
@@ -198,7 +212,7 @@ class Context:
         return self
 
     def line_to(self, x, y):
-        self._emit(f"lineTo {int(x)} {int(y)}")
+        self._emit(f"lineTo {x:.3f} {y:.3f}")
         return self
 
     def rotate(self, v):
@@ -236,7 +250,7 @@ class Context:
 
     def round_rectangle(self, x, y, width, height, radius):
         self._emit(
-            f"roundRectangle {int(x)} {int(y)} {int(width)} {int(height)} {radius}"
+            f"roundRectangle {x:.3f} {y:.3f} {width:.3f} {height:.3f} {radius:.3f}"
         )
         return self
 
@@ -279,7 +293,12 @@ class Context:
         )
         return self
 
-    def add_stop(self, pos, red, green, blue, alpha):
+    def linear_gradient(self, x0, y0, x1, y1):
+        self._emit(f"linearGradient {x0:.3f} {y0:.3f} {x1:.3f} {y1:.3f}")
+        return self
+
+    def add_stop(self, pos, color, alpha):
+        red, green, blue = color
         if red > 1.0 or green > 1.0 or blue > 1.0:
             red /= 255.0
             green /= 255.0
@@ -302,9 +321,13 @@ class Context:
         )
         return self
 
+    def begin_path(self):
+        self._emit(f"beginPath")
+        return self
+
     def arc(self, x, y, radius, arc_from, arc_to, direction):
         self._emit(
-            f"arc {int(x)} {int(y)} {int(radius)} {arc_from:.4f} {arc_to:.4f} {1 if direction else 0}"
+            f"arc {x:.3f} {y:.3f} {radius:.3f} {arc_from:.4f} {arc_to:.4f} {1 if direction else 0}"
         )
         return self
 
@@ -312,7 +335,8 @@ class Context:
         return _wasm.ctx_text_width(self._ctx, text)
 
     def clip(self):
-        return
+        self._emit(f"clip")
+        return self
 
     def get_font_name(self, i):
         return [