    uint64_t started_frame;
  
    Rect video_rect;
  } UIState;
  
  void ui_init(UIState *s);
  void ui_update(UIState *s);
  
 
</s> remove   nvgRestore(s->vg);
 </s> add   nvgResetScissor(s->vg); </s> remove   vertex_data out;
  if (!car_space_to_full_frame(s, x_in, y_in, 0.0, &out)) return;
 </s> add   vertex_data out = {};
  car_space_to_full_frame(s, x_in, y_in, 0.0, &out); </s> remove 
  nvgSave(s->vg);

 </s> add  </s> remove   out->x = KEp.v[0] / KEp.v[2];
  out->y = KEp.v[1] / KEp.v[2];
 </s> add   float x = KEp.v[0] / KEp.v[2];
  float y = KEp.v[1] / KEp.v[2];
  float car_space_transform[6];
    uint64_t started_frame;
  
    Rect video_rect;
  float car_space_transform[6];
  } UIState;
  
  void ui_init(UIState *s);
  void ui_update(UIState *s);
  
keep keep add keep keep keep keep keep
 UI: refactor transform (#19658)

* refactor transform

* always draw chevron if there is a lead

* remove nvgSave&nvgRestore

* keep one point outside the screen

* zoom chevron

* more size

* still use margin

* still use margin 
selfdrive/ui/ui.hpp