text: // 26 august 2018
  #include "pkgui.h"
  #include "_cgo_export.h"
  
  uiInitOptions *pkguiAllocInitOptions(void)
  {
  	return (uiInitOptions *) pkguiAlloc(sizeof (uiInitOptions));
  }
  
  void pkguiFreeInitOptions(uiInitOptions *o)
  {
  	free(o);
  }
  
  void pkguiQueueMain(uintptr_t n)
  {
  	uiQueueMain(pkguiDoQueueMain, (void *) n);
  }
  
  void pkguiOnShouldQuit(void)
  {
  	uiOnShouldQuit(pkguiDoOnShouldQuit, NULL);
  }
  
  void pkguiWindowOnClosing(uiWindow *w)
  {
  	uiWindowOnClosing(w, pkguiDoWindowOnClosing, NULL);
  }
  
  void pkguiButtonOnClicked(uiButton *b)
  {
  	uiButtonOnClicked(b, pkguiDoButtonOnClicked, NULL);
  }
  
  void pkguiCheckboxOnToggled(uiCheckbox *c)
  {
  	uiCheckboxOnToggled(c, pkguiDoCheckboxOnToggled, NULL);
  }
  
  void pkguiColorButtonOnChanged(uiColorButton *c)
  {
  	uiColorButtonOnChanged(c, pkguiDoColorButtonOnChanged, NULL);
  }
  
  pkguiColorDoubles pkguiAllocColorDoubles(void)
  {
  	pkguiColorDoubles c;
  
  	c.r = (double *) pkguiAlloc(4 * sizeof (double));
  	c.g = c.r + 1;
  	c.b = c.g + 1;
  	c.a = c.b + 1;
  	return c;
  }
  
  void pkguiFreeColorDoubles(pkguiColorDoubles c)
  {
  	free(c.r);
  }
  
  void pkguiComboboxOnSelected(uiCombobox *c)
  {
  	uiComboboxOnSelected(c, pkguiDoComboboxOnSelected, NULL);
  }
  
  void pkguiDateTimePickerOnChanged(uiDateTimePicker *d)
  {
  	uiDateTimePickerOnChanged(d, pkguiDoDateTimePickerOnChanged, NULL);
  }
  
  struct tm *pkguiAllocTime(void)
  {
  	return (struct tm *) pkguiAlloc(sizeof (struct tm));
  }
  
  void pkguiFreeTime(struct tm *t)
  {
  	free(t);
  }
  
  void pkguiEditableComboboxOnChanged(uiEditableCombobox *c)
  {
  	uiEditableComboboxOnChanged(c, pkguiDoEditableComboboxOnChanged, NULL);
  }
  
  void pkguiEntryOnChanged(uiEntry *e)
  {
  	uiEntryOnChanged(e, pkguiDoEntryOnChanged, NULL);
  }
  
  void pkguiFontButtonOnChanged(uiFontButton *b)
  {
  	uiFontButtonOnChanged(b, pkguiDoFontButtonOnChanged, NULL);
  }
  
  void pkguiMultilineEntryOnChanged(uiMultilineEntry *e)
  {
  	uiMultilineEntryOnChanged(e, pkguiDoMultilineEntryOnChanged, NULL);
  }
  
  void pkguiRadioButtonsOnSelected(uiRadioButtons *r)
  {
  	uiRadioButtonsOnSelected(r, pkguiDoRadioButtonsOnSelected, NULL);
  }
  
  void pkguiSliderOnChanged(uiSlider *s)
  {
  	uiSliderOnChanged(s, pkguiDoSliderOnChanged, NULL);
  }
  
  void pkguiSpinboxOnChanged(uiSpinbox *s)
  {
  	uiSpinboxOnChanged(s, pkguiDoSpinboxOnChanged, NULL);
  }
  
  uiDrawBrush *pkguiAllocBrush(void)
  {
  	return (uiDrawBrush *) pkguiAlloc(sizeof (uiDrawBrush));
  }
  
  void pkguiFreeBrush(uiDrawBrush *b)
  {
  	free(b);
  }
  
  uiDrawBrushGradientStop *pkguiAllocGradientStops(size_t n)
  {
  	return (uiDrawBrushGradientStop *) pkguiAlloc(n * sizeof (uiDrawBrushGradientStop));
  }
  
  void pkguiFreeGradientStops(uiDrawBrushGradientStop *stops)
  {
  	free(stops);
  }
  
  void pkguiSetGradientStop(uiDrawBrushGradientStop *stops, size_t i, double pos, double r, double g, double b, double a)
  {
  	stops[i].Pos = pos;
  	stops[i].R = r;
  	stops[i].G = g;
  	stops[i].B = b;
  	stops[i].A = a;
  }
  
  uiDrawStrokeParams *pkguiAllocStrokeParams(void)
  {
  	return (uiDrawStrokeParams *) pkguiAlloc(sizeof (uiDrawStrokeParams));
  }
  
  void pkguiFreeStrokeParams(uiDrawStrokeParams *p)
  {
  	free(p);
  }
  
  double *pkguiAllocDashes(size_t n)
  {
  	return (double *) pkguiAlloc(n * sizeof (double));
  }
  
  void pkguiFreeDashes(double *dashes)
  {
  	free(dashes);
  }
  
  void pkguiSetDash(double *dashes, size_t i, double dash)
  {
  	dashes[i] = dash;
  }
  
  uiDrawMatrix *pkguiAllocMatrix(void)
  {
  	return (uiDrawMatrix *) pkguiAlloc(sizeof (uiDrawMatrix));
  }
  
  void pkguiFreeMatrix(uiDrawMatrix *m)
  {
  	free(m);
  }
  
  uiUnderlineColor *pkguiNewUnderlineColor(void)
  {
  	return (uiUnderlineColor *) pkguiAlloc(sizeof (uiUnderlineColor));
  }
  
  void pkguiFreeUnderlineColor(uiUnderlineColor *c)
  {
  	free(c);
  }
  
  uiFontDescriptor *pkguiNewFontDescriptor(void)
  {
  	return (uiFontDescriptor *) pkguiAlloc(sizeof (uiFontDescriptor));
  }
  
  void pkguiFreeFontDescriptor(uiFontDescriptor *fd)
  {
  	free(fd);
  }
  
  uiDrawTextLayoutParams *pkguiNewDrawTextLayoutParams(void)
  {
  	return (uiDrawTextLayoutParams *) pkguiAlloc(sizeof (uiDrawTextLayoutParams));
  }
  
  void pkguiFreeDrawTextLayoutParams(uiDrawTextLayoutParams *p)
  {
  	free(p);
  }
  
  uiAreaHandler *pkguiAllocAreaHandler(void)
  {
  	uiAreaHandler *ah;
  
  	ah = (uiAreaHandler *) pkguiAlloc(sizeof (uiAreaHandler));
  	ah->Draw = pkguiDoAreaHandlerDraw;
  	ah->MouseEvent = pkguiDoAreaHandlerMouseEvent;
  	ah->MouseCrossed = pkguiDoAreaHandlerMouseCrossed;
  	ah->DragBroken = pkguiDoAreaHandlerDragBroken;
  	ah->KeyEvent = pkguiDoAreaHandlerKeyEvent;
  	return ah;
  }
  
  void pkguiFreeAreaHandler(uiAreaHandler *ah)
  {
  	free(ah);
  }
  
  // cgo can't generate const, so we need this trampoline
  static void realDoTableModelSetCellValue(uiTableModelHandler *mh, uiTableModel *m, int row, int column, const uiTableValue *value)
  {
  	pkguiDoTableModelSetCellValue(mh, m, row, column, (uiTableValue *) value);
  }
  
  const uiTableModelHandler pkguiTableModelHandler = {
  	.NumColumns = pkguiDoTableModelNumColumns,
  	.ColumnType = pkguiDoTableModelColumnType,
  	.NumRows = pkguiDoTableModelNumRows,
  	.CellValue = pkguiDoTableModelCellValue,
  	.SetCellValue = realDoTableModelSetCellValue,
  };
  
  uiTableTextColumnOptionalParams *pkguiAllocTableTextColumnOptionalParams(void)
  {
  	return (uiTableTextColumnOptionalParams *) pkguiAlloc(sizeof (uiTableTextColumnOptionalParams));
  }
  
  void pkguiFreeTableTextColumnOptionalParams(uiTableTextColumnOptionalParams *p)
  {
  	free(p);
  }
  
  uiTableParams *pkguiAllocTableParams(void)
  {
  	return (uiTableParams *) pkguiAlloc(sizeof (uiTableParams));
  }
  
  void pkguiFreeTableParams(uiTableParams *p)
  {
  	free(p);
  }
  