Giter Site home page Giter Site logo

hedron's Introduction

Hedron

Hedron is an easy-to-use, OOP Crystal GUI library, that allows you to do the following:

  • Create your own UI classes ("widgets") that fully integrate with existing classes
  • A markup language (with extension .hdml), which makes creating UI easy
  • Full integration with custom widgets and HDML, so you can inject your own widgets into your markup

Hedron is under active development, so check back often!

Installation

  1. Follow the instructions for installation laid out in andlabs/libui.
  2. Copy the compiled files from step 1 (i.e. files in build/out) to /usr/lib for OSX and Linux users.
  3. Go to your shard.yml file, and enter this in:
dependencies:
  hedron:
    github: hedron-crystal/hedron
    version: 0.1.0

Acknowledgement

Contributors

hedron's People

Contributors

adoxography avatar fireg3cko avatar iainmon avatar oisina avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hedron's Issues

#text methods are broken

Hedron::Entry#text and Hedron::MultilineEntry#text both fail when called, with the message

type must be String, not Pointer(UInt8)

It looks like the issue is that both methods try to implicitly cast the Pointer(Uint8) (a.k.a LibC::Char*) into String via their return type, but that's not allowed. As mentioned in this Stack Overflow answer, the pointer should used to create a new String, so the following changes fix it for me:

diff --git a/src/hedron/ui/entry.cr b/src/hedron/ui/entry.cr
index b084b2e..ccdc950 100644
--- a/src/hedron/ui/entry.cr
+++ b/src/hedron/ui/entry.cr
@@ -42,7 +42,7 @@ module Hedron
     end
 
     def text : String
-      return UI.entry_text(to_unsafe)
+      return String.new(UI.entry_text(to_unsafe))
     end
 
     def text=(entry_text : String)
diff --git a/src/hedron/ui/multiline_entry.cr b/src/hedron/ui/multiline_entry.cr
index 6d977ae..1c688bf 100644
--- a/src/hedron/ui/multiline_entry.cr
+++ b/src/hedron/ui/multiline_entry.cr
@@ -46,7 +46,7 @@ module Hedron
     end
 
     def text : String
-      return UI.multiline_entry_text(to_unsafe)
+      return String.new(UI.multiline_entry_text(to_unsafe))
     end
 
     def text=(entry_text : String)

Happy to open a PR if desired. :)

Make custom widgets more intuitive

Currently, to make a custom widget, you have to:

  • Place the code for @display into @initialize in order for it to update properly
  • Define self.widget_name, self.init_markup
  • Use self.display instead of @display since @display is nilable and cannot really be made un-nilable

A problem that I've encountered when implementing button_tab is that the index won't update - since @display is stored as a variable, I have to manually update @display's properties. This is kind of a pain.

This issue is placed here to brainstorm suggestions as to how implementing custom widgets could be made easier for people to use.

EDIT: If anyone can make a custom app or two using HDML and custom widgets and link them to this repository, that would be great!

Example controlgallery compiles and runs without error, but no window is shown

Hi,

thanks a lot for these nice bindings.

I am new to Crystal and wanted to check out some options for UI libraries.

I have successfully compiled the controlgallery example, but when I run it from the command line, no UI window is opened.
Strangely, there no errors either, and the programs just hangs:

$ crystal -v
Crystal 0.27.2 [60760a546] (2019-02-05)

LLVM: 4.0.0
Default target: x86_64-unknown-linux-gnu

~/dev/github/hedron 
$ crystal build examples/control_gallery.cr

~/dev/github/hedron 
$ ls -alh
total 1.2M
drwxr-xr-x [...]  164 Feb 12 09:53 .
drwxr-xr-x [...]  854 Feb 12 09:41 ..
-rwxr-xr-x [...] 1.2M Feb 12 09:53 control_gallery
drwxr-xr-x [...]  112 Feb 11 17:16 examples
drwxr-xr-x [...]  138 Feb 11 17:16 .git
-rw-r--r-- [...]   19 Feb 11 17:16 .gitignore
drwxr-xr-x [...]   42 Feb 11 17:31 lib
-rw-r--r-- [...] 1.1K Feb 11 17:16 LICENSE
-rw-r--r-- [...] 1.1K Feb 11 17:16 README.md
-rw-r--r-- [...]  155 Feb 11 17:16 shard.lock
-rw-r--r-- [...]  270 Feb 11 17:16 shard.yml
drwxr-xr-x [...]   56 Feb 11 17:16 spec
drwxr-xr-x [...]   30 Feb 11 17:16 src

~/dev/github/hedron 
$ ./control_gallery 
^C  # program hangs with no window shown

The example controlgallery from Fusion/libui.cr works.

This is on Kubuntu 18.10 with Crystal 0.27.2

Do you have any ideas what might be going on?

Kind regards,
Axel

Why's Control private?

I used Hedron (master, not rebuild, although I believe the issue exists on both) to write myself a little dice roller as an exercise to learn both libui and Crystal.
One of the features includes destroying a Box (or face a memory leak). However, its destroy method is inherited from Control, which is a private class. Therefore, it can't be destroyed.

I was wondering about the reason why Control is set to private, and if there was maybe another way to do this which I hadn't considered. Code is here, if it's useful.

OSX/Homebrew build example?

I have installed libui but I can't get it to compile:

~/c/a/c/h/examples ❯❯❯ crystal build control_gallery.cr                                                                                          ld: library not found for -lui
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: execution of command failed with code: 1: `cc "${@}" -o '/Users/aemadrid/code/aem/crystal/hedron/examples/control_gallery'  -rdynamic  -lui -lpcre -lgc -lpthread /usr/local/Cellar/crystal-lang/0.24.2_1/src/ext/libcrystal.a -levent -liconv -ldl -L/usr/lib -L/usr/local/lib`

BTW I can use libui from node.js

Compiling Hedron with libui.a instead of libui.A.dylib does not work on macOS

I am trying to create a partially static executable for macOS, and it works, except for when I try to use hedron and libui.a. I have libgc.a, libevent.a, and libssl.a in a folder called "vendor" in my project path. When I install hedron, and drop libui.a into the ventor folder it does not work. It only seems to work when I use libui.A.dylib. When I try to compile a Hedron project with libui.a instead of libui.A.dylib, I get the following error:

➜  CrystalDistroTest git:(master) ✗ shards build --release --link-flags="-L`pwd`/vendor" 
Dependencies are satisfied
Building: CrystalDistroTest
Error target CrystalDistroTest failed to compile:
Undefined symbols for architecture x86_64:
  "_CFArrayAppendValue", referenced from:
      _addCTFeatureEntry in libui.a(darwin_opentype.m.o)
  "_CFArrayCreateMutable", referenced from:
      _uiprivOpenTypeFeaturesToCTFeatures in libui.a(darwin_opentype.m.o)
  "_CFArrayGetCount", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivMakeVariationAxisDict in libui.a(darwin_fontvariation.m.o)
  "_CFArrayGetValueAtIndex", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivMakeVariationAxisDict in libui.a(darwin_fontvariation.m.o)
  "_CFAttributedStringBeginEditing", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringCreate", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringCreateMutableCopy", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringEndEditing", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringGetAttribute", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringGetLength", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CFAttributedStringRemoveAttribute", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFAttributedStringSetAttribute", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_CFDataGetBytePtr", referenced from:
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
      _uiprivProcessFontTraits in libui.a(darwin_fonttraits.m.o)
  "_CFDataGetLength", referenced from:
      _uiprivProcessFontTraits in libui.a(darwin_fonttraits.m.o)
  "_CFDictionaryAddValue", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CFDictionaryCreate", referenced from:
      _uiprivCTFontDescriptorAppendFeatures in libui.a(darwin_fontmatch.m.o)
      _addCTFeatureEntry in libui.a(darwin_opentype.m.o)
  "_CFDictionaryCreateMutable", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CFDictionaryGetValue", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
      _uiprivMakeVariationAxisDict in libui.a(darwin_fontvariation.m.o)
      _uiprivProcessFontVariation in libui.a(darwin_fontvariation.m.o)
  "_CFEqual", referenced from:
      _uiprivProcessFontTraits in libui.a(darwin_fonttraits.m.o)
  "_CFNumberCreate", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _addCTFeatureEntry in libui.a(darwin_opentype.m.o)
  "_CFNumberGetValue", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
      _uiprivProcessFontVariation in libui.a(darwin_fontvariation.m.o)
  "_CFRelease", referenced from:
      -[uiprivFontButton getfontdesc:] in libui.a(darwin_fontbutton.m.o)
      -[uiprivCombinedFontAttr toCTFontWithDefaultFont:] in libui.a(darwin_attrstr.m.o)
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _processAttribute in libui.a(darwin_attrstr.m.o)
      -[uiprivTextFrame dealloc] in libui.a(darwin_drawtext.m.o)
      -[uiprivFontStyleData dealloc] in libui.a(darwin_fontmatch.m.o)
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
      ...
  "_CFRetain", referenced from:
      -[uiprivFontStyleData initWithFont:] in libui.a(darwin_fontmatch.m.o)
      -[uiprivFontStyleData initWithDescriptor:] in libui.a(darwin_fontmatch.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CFStringCreateWithCString", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _otfArrayForEachOT in libui.a(darwin_opentype.m.o)
  "_CFStringCreateWithCharacters", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_CFStringCreateWithCharactersNoCopy", referenced from:
      _uiprivNewGraphemes in libui.a(darwin_graphemes.m.o)
  "_CFStringFind", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivFontDescriptorFromCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CFStringFindWithOptions", referenced from:
      _testTTFOTFSubfamilyNames in libui.a(darwin_fonttraits.m.o)
  "_CFStringGetLength", referenced from:
      _testTTFOTFSubfamilyNames in libui.a(darwin_fonttraits.m.o)
  "_CFStringGetRangeOfComposedCharactersAtIndex", referenced from:
      _uiprivNewGraphemes in libui.a(darwin_graphemes.m.o)
  "_CGAffineTransformConcat", referenced from:
      _uiDrawMatrixMultiply in libui.a(darwin_draw.m.o)
  "_CGAffineTransformEqualToTransform", referenced from:
      _uiDrawMatrixInvertible in libui.a(darwin_draw.m.o)
      _uiDrawMatrixInvert in libui.a(darwin_draw.m.o)
  "_CGAffineTransformIdentity", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CGAffineTransformInvert", referenced from:
      _uiDrawMatrixInvertible in libui.a(darwin_draw.m.o)
      _uiDrawMatrixInvert in libui.a(darwin_draw.m.o)
  "_CGAffineTransformRotate", referenced from:
      _uiDrawMatrixRotate in libui.a(darwin_draw.m.o)
  "_CGAffineTransformScale", referenced from:
      _uiDrawMatrixScale in libui.a(darwin_draw.m.o)
  "_CGAffineTransformTranslate", referenced from:
      _uiDrawMatrixTranslate in libui.a(darwin_draw.m.o)
      _uiDrawMatrixScale in libui.a(darwin_draw.m.o)
      _uiDrawMatrixRotate in libui.a(darwin_draw.m.o)
  "_CGColorCreate", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_CGColorSpaceCreateWithName", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGColorSpaceRelease", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextAddPath", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
      _uiDrawClip in libui.a(darwin_draw.m.o)
  "_CGContextClip", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
      _uiDrawClip in libui.a(darwin_draw.m.o)
  "_CGContextConcatCTM", referenced from:
      _uiDrawTransform in libui.a(darwin_draw.m.o)
  "_CGContextDrawLinearGradient", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextDrawRadialGradient", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextEOClip", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
      _uiDrawClip in libui.a(darwin_draw.m.o)
  "_CGContextEOFillPath", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextFillPath", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextGetTextMatrix", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CGContextRestoreGState", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
      _uiDrawFill in libui.a(darwin_draw.m.o)
      _uiDrawRestore in libui.a(darwin_draw.m.o)
  "_CGContextSaveGState", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
      _uiDrawFill in libui.a(darwin_draw.m.o)
      _uiDrawSave in libui.a(darwin_draw.m.o)
  "_CGContextScaleCTM", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CGContextSetRGBFillColor", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGContextSetTextMatrix", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CGContextTranslateCTM", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CGGradientCreateWithColorComponents", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGGradientRelease", referenced from:
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_CGPathAddArc", referenced from:
      _uiDrawPathNewFigureWithArc in libui.a(darwin_draw.m.o)
      _uiDrawPathArcTo in libui.a(darwin_draw.m.o)
  "_CGPathAddCurveToPoint", referenced from:
      _uiDrawPathBezierTo in libui.a(darwin_draw.m.o)
  "_CGPathAddLineToPoint", referenced from:
      _uiDrawPathLineTo in libui.a(darwin_draw.m.o)
  "_CGPathAddRect", referenced from:
      _uiDrawPathAddRectangle in libui.a(darwin_draw.m.o)
  "_CGPathCloseSubpath", referenced from:
      _uiDrawPathCloseFigure in libui.a(darwin_draw.m.o)
  "_CGPathCreateCopyByDashingPath", referenced from:
      _uiDrawStroke in libui.a(darwin_draw.m.o)
  "_CGPathCreateCopyByStrokingPath", referenced from:
      _uiDrawStroke in libui.a(darwin_draw.m.o)
  "_CGPathCreateMutable", referenced from:
      _uiDrawNewPath in libui.a(darwin_draw.m.o)
  "_CGPathCreateWithRect", referenced from:
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CGPathMoveToPoint", referenced from:
      _uiDrawPathNewFigure in libui.a(darwin_draw.m.o)
      _uiDrawPathNewFigureWithArc in libui.a(darwin_draw.m.o)
  "_CGPathRelease", referenced from:
      _uiDrawFreePath in libui.a(darwin_draw.m.o)
      _uiDrawStroke in libui.a(darwin_draw.m.o)
  "_CGPointZero", referenced from:
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CTFontCopyFontDescriptor", referenced from:
      -[uiprivFontButton getfontdesc:] in libui.a(darwin_fontbutton.m.o)
      -[uiprivFontStyleData initWithFont:] in libui.a(darwin_fontmatch.m.o)
  "_CTFontCopyName", referenced from:
      -[uiprivFontStyleData fontName:] in libui.a(darwin_fontmatch.m.o)
  "_CTFontCopyPostScriptName", referenced from:
      -[uiprivFontStyleData postScriptName] in libui.a(darwin_fontmatch.m.o)
  "_CTFontCopyTable", referenced from:
      -[uiprivFontStyleData table:] in libui.a(darwin_fontmatch.m.o)
  "_CTFontCopyVariationAxes", referenced from:
      -[uiprivFontStyleData variationAxes] in libui.a(darwin_fontmatch.m.o)
  "_CTFontCreateWithFontDescriptor", referenced from:
      -[uiprivCombinedFontAttr toCTFontWithDefaultFont:] in libui.a(darwin_attrstr.m.o)
      -[uiprivFontStyleData ensureFont] in libui.a(darwin_fontmatch.m.o)
  "_CTFontDescriptorCopyAttribute", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
      -[uiprivFontStyleData styleName] in libui.a(darwin_fontmatch.m.o)
      -[uiprivFontStyleData variation] in libui.a(darwin_fontmatch.m.o)
      _uiprivFontDescriptorFromCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CTFontDescriptorCreateCopyWithAttributes", referenced from:
      _uiprivCTFontDescriptorAppendFeatures in libui.a(darwin_fontmatch.m.o)
  "_CTFontDescriptorCreateMatchingFontDescriptors", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CTFontDescriptorCreateWithAttributes", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_CTFontGetSize", referenced from:
      -[uiprivFontButton getfontdesc:] in libui.a(darwin_fontbutton.m.o)
  "_CTFrameDraw", referenced from:
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_CTFrameGetLines", referenced from:
      -[uiprivTextFrame lines] in libui.a(darwin_drawtext.m.o)
  "_CTFramesetterCreateFrame", referenced from:
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CTFramesetterCreateWithAttributedString", referenced from:
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CTFramesetterSuggestFrameSizeWithConstraints", referenced from:
      -[uiprivTextFrame initWithLayoutParams:] in libui.a(darwin_drawtext.m.o)
  "_CTParagraphStyleCreate", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_NSApp", referenced from:
      -[uiprivApplicationClass terminate:] in libui.a(darwin_main.m.o)
      _uiInit in libui.a(darwin_main.m.o)
      _uiUninit in libui.a(darwin_main.m.o)
      _uiMain in libui.a(darwin_main.m.o)
      ___uiMain_block_invoke in libui.a(darwin_main.m.o)
      _uiMainSteps in libui.a(darwin_main.m.o)
      _uiprivMainStep in libui.a(darwin_main.m.o)
      ...
  "_NSDefaultRunLoopMode", referenced from:
      _uiMainStep in libui.a(darwin_main.m.o)
  "_NSDisableScreenUpdates", referenced from:
      _uiprivDoManualResize in libui.a(darwin_winmoveresize.m.o)
  "_NSEnableScreenUpdates", referenced from:
      _uiprivDoManualResize in libui.a(darwin_winmoveresize.m.o)
  "_NSEndMapTableEnumeration", referenced from:
      _uiprivMapWalk in libui.a(darwin_map.m.o)
  "_NSEnumerateMapTable", referenced from:
      _uiprivMapWalk in libui.a(darwin_map.m.o)
  "_NSEventTrackingRunLoopMode", referenced from:
      _uiprivDoManualMove in libui.a(darwin_winmoveresize.m.o)
      _uiprivDoManualResize in libui.a(darwin_winmoveresize.m.o)
  "_NSLog", referenced from:
      -[uiprivAppDelegate applicationShouldTerminate:] in libui.a(darwin_main.m.o)
      _uiprivLoadUndocumented in libui.a(darwin_undocumented.m.o)
      _uiprivRealBug in libui.a(darwin_debug.m.o)
  "_NSMapGet", referenced from:
      _uiprivMapGet in libui.a(darwin_map.m.o)
  "_NSMapInsert", referenced from:
      _uiprivMapSet in libui.a(darwin_map.m.o)
  "_NSMapRemove", referenced from:
      _uiprivMapDelete in libui.a(darwin_map.m.o)
  "_NSNextMapEnumeratorPair", referenced from:
      _uiprivMapWalk in libui.a(darwin_map.m.o)
  "_NSResetMapTable", referenced from:
      _uiprivMapReset in libui.a(darwin_map.m.o)
  "_NSWindowWillCloseNotification", referenced from:
      -[colorButton activate:] in libui.a(darwin_colorbutton.m.o)
      -[colorButton deactivate] in libui.a(darwin_colorbutton.m.o)
      -[uiprivFontButton activateFontButton] in libui.a(darwin_fontbutton.m.o)
      -[uiprivFontButton deactivateFontButton:] in libui.a(darwin_fontbutton.m.o)
  "_NSZeroPoint", referenced from:
      -[uiprivApplicationClass terminate:] in libui.a(darwin_main.m.o)
  "_NSZeroRect", referenced from:
      _uiNewColorButton in libui.a(darwin_colorbutton.m.o)
      _uiNewFontButton in libui.a(darwin_fontbutton.m.o)
      _uiNewArea in libui.a(darwin_area.m.o)
      _uiprivMkScrollView in libui.a(darwin_scrollview.m.o)
  "_NSZeroSize", referenced from:
      _onMoveDrag in libui.a(darwin_winmoveresize.m.o)
      _uiprivDoManualMove in libui.a(darwin_winmoveresize.m.o)
      ___uiprivDoManualMove_block_invoke in libui.a(darwin_winmoveresize.m.o)
      _uiprivDoManualResize in libui.a(darwin_winmoveresize.m.o)
      ___uiprivDoManualResize_block_invoke in libui.a(darwin_winmoveresize.m.o)
  "_OBJC_CLASS_$_NSApplication", referenced from:
      _OBJC_CLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
  "_OBJC_CLASS_$_NSAutoreleasePool", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
  "_OBJC_CLASS_$_NSButton", referenced from:
      _OBJC_CLASS_$_uiprivFontButton in libui.a(darwin_fontbutton.m.o)
  "_OBJC_CLASS_$_NSColor", referenced from:
      objc-class-ref in libui.a(darwin_colorbutton.m.o)
      objc-class-ref in libui.a(darwin_attrstr.m.o)
      objc-class-ref in libui.a(darwin_area.m.o)
  "_OBJC_CLASS_$_NSColorPanel", referenced from:
      objc-class-ref in libui.a(darwin_colorbutton.m.o)
  "_OBJC_CLASS_$_NSColorSpace", referenced from:
      objc-class-ref in libui.a(darwin_colorbutton.m.o)
  "_OBJC_CLASS_$_NSColorWell", referenced from:
      _OBJC_CLASS_$_colorButton in libui.a(darwin_colorbutton.m.o)
  "_OBJC_CLASS_$_NSDate", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
      objc-class-ref in libui.a(darwin_winmoveresize.m.o)
  "_OBJC_CLASS_$_NSEvent", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
      objc-class-ref in libui.a(darwin_area.m.o)
  "_OBJC_CLASS_$_NSFont", referenced from:
      objc-class-ref in libui.a(darwin_fontbutton.m.o)
      objc-class-ref in libui.a(darwin_control.m.o)
  "_OBJC_CLASS_$_NSFontManager", referenced from:
      objc-class-ref in libui.a(darwin_fontbutton.m.o)
  "_OBJC_CLASS_$_NSFontPanel", referenced from:
      _OBJC_CLASS_$_uiprivNonModalFontPanel in libui.a(darwin_fontbutton.m.o)
      objc-class-ref in libui.a(darwin_fontbutton.m.o)
  "_OBJC_CLASS_$_NSGraphicsContext", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
      objc-class-ref in libui.a(darwin_area.m.o)
  "_OBJC_CLASS_$_NSImage", referenced from:
      objc-class-ref in libui.a(darwin_attrstr.m.o)
  "_OBJC_CLASS_$_NSLayoutConstraint", referenced from:
      objc-class-ref in libui.a(darwin_autolayout.m.o)
  "_OBJC_CLASS_$_NSMapTable", referenced from:
      objc-class-ref in libui.a(darwin_map.m.o)
  "_OBJC_CLASS_$_NSMenu", referenced from:
      objc-class-ref in libui.a(darwin_menu.m.o)
  "_OBJC_CLASS_$_NSMenuItem", referenced from:
      objc-class-ref in libui.a(darwin_menu.m.o)
  "_OBJC_CLASS_$_NSMutableArray", referenced from:
      objc-class-ref in libui.a(darwin_menu.m.o)
      objc-class-ref in libui.a(darwin_alloc.m.o)
      objc-class-ref in libui.a(darwin_attrstr.m.o)
  "_OBJC_CLASS_$_NSMutableDictionary", referenced from:
      objc-class-ref in libui.a(darwin_fontvariation.m.o)
  "_OBJC_CLASS_$_NSMutableString", referenced from:
      objc-class-ref in libui.a(darwin_alloc.m.o)
      objc-class-ref in libui.a(darwin_debug.m.o)
  "_OBJC_CLASS_$_NSNotificationCenter", referenced from:
      objc-class-ref in libui.a(darwin_colorbutton.m.o)
      objc-class-ref in libui.a(darwin_fontbutton.m.o)
  "_OBJC_CLASS_$_NSNumber", referenced from:
      objc-class-ref in libui.a(darwin_attrstr.m.o)
      objc-class-ref in libui.a(darwin_fontvariation.m.o)
  "_OBJC_CLASS_$_NSObject", referenced from:
      _OBJC_CLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivMenuManager in libui.a(darwin_menu.m.o)
      _OBJC_CLASS_$_uiprivCombinedFontAttr in libui.a(darwin_attrstr.m.o)
      _OBJC_CLASS_$_uiprivDrawTextBackgroundParams in libui.a(darwin_drawtext.m.o)
      _OBJC_CLASS_$_uiprivTextFrame in libui.a(darwin_drawtext.m.o)
      _OBJC_CLASS_$_uiprivFontStyleData in libui.a(darwin_fontmatch.m.o)
      ...
  "_OBJC_CLASS_$_NSProcessInfo", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
      objc-class-ref in libui.a(darwin_menu.m.o)
  "_OBJC_CLASS_$_NSScrollView", referenced from:
      objc-class-ref in libui.a(darwin_scrollview.m.o)
  "_OBJC_CLASS_$_NSString", referenced from:
      objc-class-ref in libui.a(darwin_menu.m.o)
      objc-class-ref in libui.a(darwin_fontbutton.m.o)
      objc-class-ref in libui.a(darwin_alloc.m.o)
      objc-class-ref in libui.a(darwin_attrstr.m.o)
      objc-class-ref in libui.a(darwin_debug.m.o)
      objc-class-ref in libui.a(darwin_window.m.o)
  "_OBJC_CLASS_$_NSTimer", referenced from:
      objc-class-ref in libui.a(darwin_main.m.o)
  "_OBJC_CLASS_$_NSTrackingArea", referenced from:
      objc-class-ref in libui.a(darwin_area.m.o)
  "_OBJC_CLASS_$_NSValue", referenced from:
      objc-class-ref in libui.a(darwin_menu.m.o)
      objc-class-ref in libui.a(darwin_alloc.m.o)
  "_OBJC_CLASS_$_NSView", referenced from:
      _OBJC_CLASS_$_areaView in libui.a(darwin_area.m.o)
  "_OBJC_CLASS_$_NSWindow", referenced from:
      _OBJC_CLASS_$_uiprivNSWindow in libui.a(darwin_window.m.o)
  "_OBJC_METACLASS_$_NSApplication", referenced from:
      _OBJC_METACLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
  "_OBJC_METACLASS_$_NSButton", referenced from:
      _OBJC_METACLASS_$_uiprivFontButton in libui.a(darwin_fontbutton.m.o)
  "_OBJC_METACLASS_$_NSColorWell", referenced from:
      _OBJC_METACLASS_$_colorButton in libui.a(darwin_colorbutton.m.o)
  "_OBJC_METACLASS_$_NSFontPanel", referenced from:
      _OBJC_METACLASS_$_uiprivNonModalFontPanel in libui.a(darwin_fontbutton.m.o)
  "_OBJC_METACLASS_$_NSObject", referenced from:
      _OBJC_METACLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivMenuManager in libui.a(darwin_menu.m.o)
      _OBJC_METACLASS_$_colorButton in libui.a(darwin_colorbutton.m.o)
      _OBJC_METACLASS_$_uiprivFontButton in libui.a(darwin_fontbutton.m.o)
      _OBJC_METACLASS_$_uiprivNonModalFontPanel in libui.a(darwin_fontbutton.m.o)
      ...
  "_OBJC_METACLASS_$_NSView", referenced from:
      _OBJC_METACLASS_$_areaView in libui.a(darwin_area.m.o)
  "_OBJC_METACLASS_$_NSWindow", referenced from:
      _OBJC_METACLASS_$_uiprivNSWindow in libui.a(darwin_window.m.o)
  "___CFConstantStringClassReference", referenced from:
      CFString in libui.a(darwin_main.m.o)
      CFString in libui.a(darwin_menu.m.o)
      CFString in libui.a(darwin_menu.m.o)
      CFString in libui.a(darwin_menu.m.o)
      CFString in libui.a(darwin_menu.m.o)
      CFString in libui.a(darwin_menu.m.o)
      CFString in libui.a(darwin_menu.m.o)
      ...
  "___objc_personality_v0", referenced from:
      _uiprivDoManualMove in libui.a(darwin_winmoveresize.m.o)
      _uiprivDoManualResize in libui.a(darwin_winmoveresize.m.o)
      Dwarf Exception Unwind Info (__eh_frame) in libui.a(darwin_winmoveresize.m.o)
      _otfArrayForEachAAT in libui.a(darwin_opentype.m.o)
      Dwarf Exception Unwind Info (__eh_frame) in libui.a(darwin_opentype.m.o)
  "__objc_empty_cache", referenced from:
      _OBJC_CLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivMenuManager in libui.a(darwin_menu.m.o)
      ...
  "__objc_empty_vtable", referenced from:
      _OBJC_CLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivApplicationClass in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivAppDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_METACLASS_$_uiprivTimerDelegate in libui.a(darwin_main.m.o)
      _OBJC_CLASS_$_uiprivMenuManager in libui.a(darwin_menu.m.o)
      ...
  "_kCFAllocatorNull", referenced from:
      _uiprivNewGraphemes in libui.a(darwin_graphemes.m.o)
  "_kCFCopyStringDictionaryKeyCallBacks", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivCTFontDescriptorAppendFeatures in libui.a(darwin_fontmatch.m.o)
      _addCTFeatureEntry in libui.a(darwin_opentype.m.o)
  "_kCFTypeArrayCallBacks", referenced from:
      _uiprivOpenTypeFeaturesToCTFeatures in libui.a(darwin_opentype.m.o)
  "_kCFTypeDictionaryValueCallBacks", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivCTFontDescriptorAppendFeatures in libui.a(darwin_fontmatch.m.o)
      _addCTFeatureEntry in libui.a(darwin_opentype.m.o)
  "_kCGColorSpaceSRGB", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
      _uiDrawFill in libui.a(darwin_draw.m.o)
  "_kCTFontAttributeName", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_kCTFontFamilyNameAttribute", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
      _uiprivFontDescriptorFromCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_kCTFontFamilyNameKey", referenced from:
      -[uiprivFontStyleData familyName] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontFeatureSelectorIdentifierKey", referenced from:
      ___otfArrayForEachAAT_block_invoke in libui.a(darwin_opentype.m.o)
  "_kCTFontFeatureSettingsAttribute", referenced from:
      _uiprivCTFontDescriptorAppendFeatures in libui.a(darwin_fontmatch.m.o)
  "_kCTFontFeatureTypeIdentifierKey", referenced from:
      ___otfArrayForEachAAT_block_invoke in libui.a(darwin_opentype.m.o)
  "_kCTFontFormatAttribute", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontFullNameKey", referenced from:
      -[uiprivFontStyleData fullName] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontRegistrationScopeAttribute", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontSizeAttribute", referenced from:
      _uiprivFontDescriptorToCTFontDescriptor in libui.a(darwin_fontmatch.m.o)
  "_kCTFontStyleNameAttribute", referenced from:
      -[uiprivFontStyleData styleName] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontSubFamilyNameKey", referenced from:
      -[uiprivFontStyleData subFamilyName] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontSymbolicTrait", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontTraitsAttribute", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontVariationAttribute", referenced from:
      -[uiprivFontStyleData variation] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontVariationAxisDefaultValueKey", referenced from:
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
  "_kCTFontVariationAxisIdentifierKey", referenced from:
      _uiprivMakeVariationAxisDict in libui.a(darwin_fontvariation.m.o)
  "_kCTFontVariationAxisMaximumValueKey", referenced from:
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
  "_kCTFontVariationAxisMinimumValueKey", referenced from:
      -[fvarAxis initWithIndex:dict:avarTable:] in libui.a(darwin_fontvariation.m.o)
  "_kCTFontWeightTrait", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTFontWidthTrait", referenced from:
      -[uiprivFontStyleData prepare] in libui.a(darwin_fontmatch.m.o)
  "_kCTForegroundColorAttributeName", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_kCTParagraphStyleAttributeName", referenced from:
      _uiprivAttributedStringToCFAttributedString in libui.a(darwin_attrstr.m.o)
  "_kCTUnderlineColorAttributeName", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_kCTUnderlineStyleAttributeName", referenced from:
      _processAttribute in libui.a(darwin_attrstr.m.o)
  "_objc_autoreleasePoolPop", referenced from:
      _uiInit in libui.a(darwin_main.m.o)
      _uiUninit in libui.a(darwin_main.m.o)
      _uiprivMainStep in libui.a(darwin_main.m.o)
      _newItem in libui.a(darwin_menu.m.o)
      _uiNewMenu in libui.a(darwin_menu.m.o)
      -[uiprivCombinedFontAttr hash] in libui.a(darwin_attrstr.m.o)
  "_objc_autoreleasePoolPush", referenced from:
      _uiInit in libui.a(darwin_main.m.o)
      _uiUninit in libui.a(darwin_main.m.o)
      _uiprivMainStep in libui.a(darwin_main.m.o)
      _newItem in libui.a(darwin_menu.m.o)
      _uiNewMenu in libui.a(darwin_menu.m.o)
      -[uiprivCombinedFontAttr hash] in libui.a(darwin_attrstr.m.o)
  "_objc_enumerationMutation", referenced from:
      _uiprivUninitAlloc in libui.a(darwin_alloc.m.o)
      -[uiprivTextFrame draw:textLayout:at:y:] in libui.a(darwin_drawtext.m.o)
  "_objc_getProperty", referenced from:
      -[uiprivAppDelegate menuManager] in libui.a(darwin_main.m.o)
      -[uiprivMenuManager quitItem] in libui.a(darwin_menu.m.o)
      -[uiprivMenuManager preferencesItem] in libui.a(darwin_menu.m.o)
      -[uiprivMenuManager aboutItem] in libui.a(darwin_menu.m.o)
  "_objc_msgSend", referenced from:
      -[uiprivApplicationClass terminate:] in libui.a(darwin_main.m.o)
      -[uiprivAppDelegate dealloc] in libui.a(darwin_main.m.o)
      _uiInit in libui.a(darwin_main.m.o)
      _uiUninit in libui.a(darwin_main.m.o)
      _uiMain in libui.a(darwin_main.m.o)
      ___uiMain_block_invoke in libui.a(darwin_main.m.o)
      _uiMainSteps in libui.a(darwin_main.m.o)
      ...
  "_objc_msgSendSuper2", referenced from:
      -[uiprivApplicationClass sendEvent:] in libui.a(darwin_main.m.o)
      -[uiprivApplicationClass sendAction:to:from:] in libui.a(darwin_main.m.o)
      -[uiprivApplicationClass targetForAction:to:from:] in libui.a(darwin_main.m.o)
      -[uiprivAppDelegate dealloc] in libui.a(darwin_main.m.o)
      -[uiprivTimerDelegate initWithCallback:data:] in libui.a(darwin_main.m.o)
      -[uiprivMenuManager init] in libui.a(darwin_menu.m.o)
      -[uiprivMenuManager dealloc] in libui.a(darwin_menu.m.o)
      ...
  "_objc_msgSend_stret", referenced from:
      -[areaView drawRect:] in libui.a(darwin_area.m.o)
      -[areaView setupNewTrackingArea] in libui.a(darwin_area.m.o)
      -[areaView doMouseEvent:] in libui.a(darwin_area.m.o)
      _uiWindowContentSize in libui.a(darwin_window.m.o)
      _onMoveDrag in libui.a(darwin_winmoveresize.m.o)
      _uiprivDoManualMove in libui.a(darwin_winmoveresize.m.o)
      ___uiprivDoManualMove_block_invoke in libui.a(darwin_winmoveresize.m.o)
      ...
  "_objc_setProperty_atomic", referenced from:
      -[uiprivAppDelegate setMenuManager:] in libui.a(darwin_main.m.o)
      -[uiprivMenuManager setQuitItem:] in libui.a(darwin_menu.m.o)
      -[uiprivMenuManager setPreferencesItem:] in libui.a(darwin_menu.m.o)
      -[uiprivMenuManager setAboutItem:] in libui.a(darwin_menu.m.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: execution of command failed with code: 1: `cc "${@}" -o '/Users/iainmoncrief/Desktop/CrystalDistroTest/bin/CrystalDistroTest' -L/Users/iainmoncrief/Desktop/CrystalDistroTest/vendor -rdynamic  /Users/iainmoncrief/Desktop/CrystalDistroTest/lib/hedron/src/hedron/../../../../vendor/libui.a -lz `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libssl || printf %s '-lssl -lcrypto'` `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libcrypto || printf %s '-lcrypto'` -lpcre -lgc -lpthread /usr/local/Cellar/crystal/0.27.2/src/ext/libcrystal.a -levent -liconv -ldl -L/usr/lib -L/usr/local/lib`

Create release v0.1.0

If you create a new crystal app and add the hedron dependency into the shards.yml, shards is unable to install it. Please create a release, so people can install this shard correctly.

`on_change=` cannot have a block

Hi 👋 ,

Thanks for putting the effort into such a neat library!

None of the examples are currently building on 0.26.0, due to this compile error:

crystal ml_gallery.cr 
Error in ml_gallery.cr:1: while requiring "./ml_gallery/ml_gallery.cr"

require "./ml_gallery/ml_gallery.cr"
^

in ml_gallery/ml_gallery.cr:1: while requiring "../../src/hedron.cr"

require "../../src/hedron.cr"
^

in /home/andy/scratch/hedron/src/hedron.cr:2: while requiring "./hedron/hdml/*"

require "./hedron/hdml/*"
^

in /home/andy/scratch/hedron/src/hedron/hdml/hdml.cr:2: while requiring "./parser.cr"

require "./parser.cr"
^

in /home/andy/scratch/hedron/src/hedron/hdml/parser.cr:1: while requiring "../ui/*"

require "../ui/*"
^

Syntax error in /home/andy/scratch/hedron/src/hedron/ui/font_button.cr:26: setter method 'on_change=' cannot have a block

    def on_change=(&block : FontButton ->)
                                          ^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.