New CSS style borders (with CreateBorder command) as well as Image borders (CreateBorderImg) and borders are now integrated into Widgets with WidgetSetBorder.
Also new Widget caching system which should improve rendering performance quite a bit! (the cache memory management is placeholder at the moment and still needs a bit of work however)
Take a look at the 'test_updateLayout.pb' example to see the new borders.
https://www.progui.co.uk/downloads/ProGUI_V3_Alpha.zip
"preliminary" docs here https://www.progui.co.uk/downloads/testhelp/index.html (take the example code mentioned with a pinch of salt)
Alpha 3
New commands:
Code: Select all
DrawGetStroke.f(*Flags.Integer = #Null, *DashStartOffset.Float = #Null)
BrushSetDpiScaling(Brush, isEnabled.b)
BrushGetDpiScaling(Brush)
BorderSetDpiScaling(Border, isEnabled.b)
BorderGetDpiScaling(Border)
CreateBorder(StyleFlags = #Null, Width.d = 3, CornerRadius = #Null, Color = #PG_Ignore, Opacity.f = 1)
BorderSetFlags(Border, Flags)
BorderGetFlags(Border)
BorderSetWidth(Border, LeftWidth.d, TopWidth.d, RightWidth.d, BottomWidth.d)
BorderGetWidth.d(Border, *LeftWidth.Double = #Null, *TopWidth.Double = #Null, *RightWidth.Double = #Null, *BottomWidth.Double = #Null)
BorderSetColor(Border, LeftColor.l, LeftOpacity.f, TopColor.l, TopOpacity.f, RightColor.l, RightOpacity.f, BottomColor.l, BottomOpacity.f)
BorderGetColor.l(Border, *LeftColor.Long = #Null, *LeftOpacity.Float = #Null, *TopColor.Long = #Null, *TopOpacity.Float = #Null, *RightColor.Long = #Null, *RightOpacity.Float = #Null, *BottomColor.Long = #Null, *BottomOpacity.Float = #Null)
BorderSetRadius(Border, TopLeftRx.d, TopLeftRy.d, TopRightRx.d, TopRightRy.d, BottomLeftRx.d, BottomLeftRy.d, BottomRightRx.d, BottomRightRy.d)
BorderGetRadius.d(Border, *TopLeftRx.Double = #Null, *TopLeftRy.Double = #Null, *TopRightRx.Double = #Null, *TopRightRy.Double = #Null, *BottomLeftRx.Double = #Null, *BottomLeftRy.Double = #Null, *BottomRightRx.Double = #Null, *BottomRightRy.Double = #Null)
DrawSetAntialias(Mode.i)
DrawGetAntialias()
DrawSetBlendMode(Mode.i)
DrawGetBlendMode()
WidgetSetName(Widget, Name.s)
WidgetSetBorder(Widget, Border)
WidgetSetOpacity(Widget, Opacity.f)
WidgetGetOpacity.f(Widget)
CreateImg(Width, Height, BackgroundColor = #PG_Img_Transparent, PixelFormat = #PG_Img_Format_BGRA32)
New vector drawing path commands:
Code: Select all
PathMoveTo(x.d, y.d, Flags = #Null)
PathAddLine(x.d, y.d, Flags = #Null)
PathAddCurve(x1.d, y1.d, x2.d, y2.d, x3.d, y3.d, Flags = #Null)
PathAddArc(x.d, y.d, rx.d, ry.d, rotationAngle.d = 0, isSweepClockwise.b = #True, isLargeArc.b = #False)
PathClose()
PathReset()
PathGetCursorX()
PathGetCursorY()
DrawPath(Color.l, Opacity.f = 1, Flags = #Null)
DrawPathFill(Brush, Flags = #Null)
DrawPathStroke(Color.l, Opacity.f = 1, Flags = #Null)
DrawPathStrokeFill(Brush, Flags = #Null)
DrawSave()
DrawRestore()
BeginClipPath(Flags = #Null)
EndClip()
https://www.youtube.com/shorts/6hz-ESyDErU

Alpha 2
Quite a few bug fixes, the GFX API has been fleshed out massively and the API has been simplified greatly for dealing with Layouts and Widgets (now using Getters/Setters instead of LayoutSetProperty/LayoutItemSetProperty).
Also brand new BorderImgEditor tool with complete source (showcases how to create an app from scratch and how to incorporate a hybrid of PureBasic gadgets and ProGUI widgets). It's worth noting that this is a DirectX 11 window, all of the PureBasic gadget (Win32 Common control) rendering is diverted directly onto Direct2D bitmaps using some low level API hooks (this applies to all ProGUI windows and is automatic, some benefits are alpha composition with layers and alpha masking - this also applies to the WebView2 widget).
https://www.youtube.com/watch?v=kz6yhsJMPUk

Please bare in mind this is still alpha - there will be bugs, parts of the API missing / needs fleshing out etc..
Currently no documentation but take a look at the 'ProGUI_pb.pbi' for constants and commands as well as the test examples (which are a bit rough and ready at the moment). But yep have a mess around with the examples (try uncommenting various bits) and have fun!
Core features implemented:
* Cross platform, currently Windows and Linux (although the Linux code is a little behind at the moment).
* Unified GFX API - DirectX 11/ Direct2D / DirectWrite on Windows and Cairo / Pango on Linux.
* Automatic per monitor DPI scaling using Device Independant Pixels.
* Advanced layout engines including Basic, Flex and Grid which can handle updating tens of thousands of items without breaking a sweat.
* Overflow and dynamic bucket system for virtual scrolling in layouts.
* Event handler engine that can be easily subclassed with many handlers per event.
* Animation with all rendering synced to the animation and render threads.
* Easily create custom widgets using the GFX API.
Windows specific features:
* Super fast rendering and glitch-free window resizing with direct integration with the Desktop Window Manager.
* Diverted rendering of all Win32 common controls (also includes PB Canvas and Scintilla) directly onto the Direct2D bitmaps (including UXTheme animation), allowing alpha transparency and masking.
* Native WebView2 widget with rendering diverted directly onto the Direct2D bitmaps.
Layout features:
All layouts support padding and item margins along with overflow and scrolling.
Layouts support automatic 'fit-to-content' and can be nested.
Commands (325):
Code: Select all
DispatchEvent(Object, EventType, *EventData = #Null)
AddEventHandler(Object, EventType, *Callback, *UserData = #Null)
AlphaBlendColor(Color1 , Color2 , Alpha)
GetGFXDriver()
CreateImg(Width, Height, BackgroundColor = #PG_Img_Transparent, PixelFormat = #PG_Img_Format_BGRA32)
LoadImg(Path.s, Flags = #Null)
ImgGetWidth(Img)
ImgGetHeight(Img)
ImgAddSize(Img, SrcImg)
ImgSetProperty(Img, Property, Value)
ImgSetInterpolationMode(Img, InterpolationMode)
ImgGetInterpolationMode(Img)
OutputImg(Img, DPI_X = #Null, DPI_Y = #Null)
BeginDraw(Output)
EndDraw()
DrawSave()
DrawRestore()
DrawDPI(DPI_X, DPI_Y = #Null)
DrawGetDPI(*DPI_Y.Integer = #Null)
DrawGetDPIScaleX.d()
DrawGetDPIScaleY.d()
DrawSetAntialias(Mode.i)
DrawGetAntialias()
DrawSetBlendMode(Mode.i)
DrawGetBlendMode()
BeginLayer(x.d, y.d, Width.d, Height.d, Opacity.f = 1, OpacityBrush = #Null, Border = #Null)
EndLayer()
BeginClipBox(x.d, y.d, Width.d, Height.d)
BeginClipPath(Flags = #Null)
EndClip()
CreateBrushImg(Img)
CreateBrushGradientLinear(StartX.d, StartY.d, EndX.d, EndY.d, StartColor.l, StartOpacity.f, EndColor.l, EndOpacity.f)
CreateBrushGradientRadial(CenterX.d, CenterY.d, OriginOffsetX.d, OriginOffsetY.d, RadiusX.d, RadiusY.d, StartColor.l, StartOpacity.f, EndColor.l, EndOpacity.f)
BrushGradientAddColor(Brush, Position.f, Color.l, Opacity.f)
BrushGradientLinearSetPoints(Brush, StartX.d, StartY.d, EndX.d, EndY.d)
BrushGradientRadialSetPoints(Brush, CenterX.d, CenterY.d, OriginOffsetX.d, OriginOffsetY.d, RadiusX.d, RadiusY.d)
BrushSetPosition(Brush, x.d, y.d)
BrushSetScale(Brush, ScaleX.d, ScaleY.d, CenterPx.d = 0, CenterPy.d = 0)
BrushSetRotation(Brush, Rotation.d, CenterPx.d, CenterPy.d)
BrushSetOpacity(Brush, Opacity.f)
BrushSetExtendMode(Brush, ExtendModeX, ExtendModeY)
BrushSetInterpolationMode(Brush, InterpolationMode)
BrushGetInterpolationMode(Brush)
BrushSetDpiScaling(Brush, isEnabled.b)
BrushGetDpiScaling(Brush)
BrushReset(Brush)
BrushSetImg(Brush, Img)
FreeBrush(Brush)
CreateBorder(StyleFlags = #Null, Width.d = 3, CornerRadius = #Null, Color = #PG_Ignore, Opacity.f = 1) ; Creates a border
CreateBorderImg(Img, ImgMask, LeftEdgeOffset, TopEdgeOffset, RightEdgeOffset, BottomEdgeOffset, Flags = #Null) ; Creates an Img border
BorderImgSetSlices(Border, LeftEdgeOffset, TopEdgeOffset, RightEdgeOffset, BottomEdgeOffset)
BorderImgGetSlices(Border, *LeftEdgeOffset.Integer, *TopEdgeOffset.Integer = #Null, *RightEdgeOffset.Integer = #Null, *BottomEdgeOffset.Integer = #Null)
BorderImgSetWidth(Border, leftScaleFactor.d, topScaleFactor.d = #PG_Ignore, rightScaleFactor.d = #PG_Ignore, bottomScaleFactor.d = #PG_Ignore)
BorderImgGetWidth.d(Border, *leftScaleFactor.Double, *topScaleFactor.Double = #Null, *rightScaleFactor.Double = #Null, *bottomScaleFactor.Double = #Null)
BorderImgSetFlags(Border, Flags)
BorderImgGetFlags(Border)
BorderImgSetInterpolationMode(Border, InterpolationMode)
BorderImgGetInterpolationMode(Border)
BorderSetDpiScaling(Border, isEnabled.b)
BorderGetDpiScaling(Border)
BorderSetFlags(Border, Flags)
BorderGetFlags(Border)
BorderSetWidth(Border, LeftWidth.d, TopWidth.d, RightWidth.d, BottomWidth.d)
BorderGetWidth.d(Border, *LeftWidth.Double = #Null, *TopWidth.Double = #Null, *RightWidth.Double = #Null, *BottomWidth.Double = #Null)
BorderSetColor(Border, LeftColor.l, LeftOpacity.f, TopColor.l, TopOpacity.f, RightColor.l, RightOpacity.f, BottomColor.l, BottomOpacity.f)
BorderGetColor.l(Border, *LeftColor.Long = #Null, *LeftOpacity.Float = #Null, *TopColor.Long = #Null, *TopOpacity.Float = #Null, *RightColor.Long = #Null, *RightOpacity.Float = #Null, *BottomColor.Long = #Null, *BottomOpacity.Float = #Null)
BorderSetRadius(Border, TopLeftRx.d, TopLeftRy.d, TopRightRx.d, TopRightRy.d, BottomLeftRx.d, BottomLeftRy.d, BottomRightRx.d, BottomRightRy.d)
BorderGetRadius.d(Border, *TopLeftRx.Double = #Null, *TopLeftRy.Double = #Null, *TopRightRx.Double = #Null, *TopRightRy.Double = #Null, *BottomLeftRx.Double = #Null, *BottomLeftRy.Double = #Null, *BottomRightRx.Double = #Null, *BottomRightRy.Double = #Null)
FreeBorder(Border)
DrawClear(Color = 0, Opacity.f = 0)
PathMoveTo(x.d, y.d, Flags = #Null)
PathAddLine(x.d, y.d, Flags = #Null)
PathAddCurve(x1.d, y1.d, x2.d, y2.d, x3.d, y3.d, Flags = #Null)
PathAddArc(x.d, y.d, rx.d, ry.d, rotationAngle.d = 0, isSweepClockwise.b = #True, isLargeArc.b = #False)
PathClose()
PathReset()
PathGetCursorX.d()
PathGetCursorY.d()
DrawPath(Color.l, Opacity.f = 1, Flags = #Null)
DrawPathFill(Brush, Flags = #Null)
DrawPathStroke(Color.l, Opacity.f = 1, Flags = #Null)
DrawPathStrokeFill(Brush, Flags = #Null)
DrawSetStroke(Width.f, Flags = #Null, DashStartOffset.f = 0)
DrawGetStroke.f(*Flags.Integer = #Null, *DashStartOffset.Float = #Null)
DrawSetStrokeCustom(*CustomDashArray.FLOAT, CustomDashArrayCount)
DrawSetStrokeMiterLimit(MiterLimit.f)
DrawImg(Img, x.d, y.d, Width.d = #PG_Ignore, Height.d = #PG_Ignore, Opacity.f = 1, Frame.i = #Null)
DrawImgEx(Img, x.d, y.d, Width.d, Height.d, dx.d, dy.d, dWidth.d, dHeight.d, Opacity.f)
DrawBorder(Border, x.d, y.d, Width.d, Height.d, Opacity.f = 1, FillBrush = #Null, Flags = #Null)
DrawLine(x1.d, y1.d, x2.d, y2.d, Color.l, Opacity.f = 1)
DrawLineFill(x1.d, y1.d, x2.d, y2.d, Brush)
DrawBox(x.d, y.d, Width.d, Height.d, Color.l, Opacity.f = 1)
DrawBoxFill(x.d, y.d, Width.d, Height.d, Brush, OpacityBrush = #Null)
DrawBoxStroke(x.d, y.d, Width.d, Height.d, Color.l, Opacity.f = 1)
DrawBoxStrokeFill(x.d, y.d, Width.d, Height.d, Brush)
DrawRoundBox(x.d, y.d, Width.d, Height.d, RadiusX.d, RadiusY.d, Color.l, Opacity.f = 1, NoRadiusDPIScaling.b = #False)
DrawRoundBoxFill(x.d, y.d, Width.d, Height.d, RadiusX.d, RadiusY.d, Brush, NoRadiusDPIScaling.b = #False)
DrawRoundBoxStroke(x.d, y.d, Width.d, Height.d, RadiusX.d, RadiusY.d, Color.l, Opacity.f = 1, NoRadiusDPIScaling.b = #False)
DrawRoundBoxStrokeFill(x.d, y.d, Width.d, Height.d, RadiusX.d, RadiusY.d, Brush, NoRadiusDPIScaling.b = #False)
DrawEllipse(x.d, y.d, RadiusX.d, RadiusY.d, Color.l, Opacity.f = 1)
DrawEllipseFill(x.d, y.d, RadiusX.d, RadiusY.d, Brush)
DrawEllipseStroke(x.d, y.d, RadiusX.d, RadiusY.d, Color.l, Opacity.f = 1)
DrawEllipseStrokeFill(x.d, y.d, RadiusX.d, RadiusY.d, Brush)
DrawTxt(Text.i, x.d, y.d, Color.l, Opacity.f = 1)
DrawTxtFill(Text.i, x.d, y.d, Brush)
ImgGrab(Img, x, y, Width, Height)
FreeImg(Img)
CreateText(Content.s, FontName.s, PointSize.d, LayoutWidth.d = #Null, LayoutHeight.d = #Null)
TextSetContent(Text, Content.s)
TextSetJustify(Text, Justify)
TextSetAlign(Text, Align)
TextSetWeight(Text, Weight)
TextSetStyle(Text, Style)
TextSetUnderline(Text, IsUnderline.b)
TextSetStrikethrough(Text, IsStrikethrough.b)
TextSetWrap(Text, Wrap)
TextSetTrimming(Text, Trimming, Delimiter = #Null, DelimiterCount = #Null)
TextSetWidth(Text, LayoutWidth.d)
TextGetWidth.d(Text, ReturnLayoutWidth.b = #False)
TextSetHeight(Text, LayoutHeight.d)
TextGetHeight.d(Text, ReturnLayoutHeight.b = #False)
FreeText(Text)
CreateLayout(LayoutType = #PG_Layout_Type_Basic)
LayoutGetCurrent()
LayoutSetCurrent(Layout)
LayoutPush()
LayoutPop()
LayoutSetType(Layout, LayoutType, Flags = #Null)
LayoutGetType(Layout)
LayoutAddWidget(Layout, Widget, Flags = #Null)
LayoutGetItemFromWidget(Widget)
LayoutGetScrollOffsetX.d(Layout)
LayoutGetScrollOffsetY.d(Layout)
LayoutSetPadding(Layout, Padding)
LayoutGetPadding(Layout, *PaddingLeft.Integer = #Null, *PaddingTop.Integer = #Null, *PaddingRight.Integer = #Null, *PaddingBottom.Integer = #Null)
LayoutSetPaddingLeft(Layout, Padding)
LayoutGetPaddingLeft(Layout)
LayoutSetPaddingTop(Layout, Padding)
LayoutGetPaddingTop(Layout)
LayoutSetPaddingRight(Layout, Padding)
LayoutGetPaddingRight(Layout)
LayoutSetPaddingBottom(Layout, Padding)
LayoutGetPaddingBottom(Layout)
LayoutFlexSetDirection(Layout, Direction)
LayoutFlexGetDirection(Layout)
LayoutFlexSetWrap(Layout, Wrap)
LayoutFlexGetWrap(Layout)
LayoutFlexSetJustify(Layout, Justify)
LayoutFlexGetJustify(Layout)
LayoutFlexSetAlignItems(Layout, AlignItems)
LayoutFlexGetAlignItems(Layout)
LayoutFlexSetAlignContent(Layout, AlignContent)
LayoutFlexGetAlignContent(Layout)
LayoutGridSetFlow(Layout, Flow)
LayoutGridGetFlow(Layout)
LayoutGridSetColumn(Layout, Index = #Null, Size.d = #PG_Grid_Default, isPercent.b = #False)
LayoutGridGetColumn.d(Layout, Index, *isPercent.Integer = #Null)
LayoutGridGetColumnCount(Layout)
LayoutGridSetColumnMin(Layout, Index = #Null, Size.d = #PG_Grid_Default)
LayoutGridGetColumnMin.d(Layout, Index)
LayoutGridSetColumnMax(Layout, Index = #Null, Size.d = #PG_Grid_Default)
LayoutGridGetColumnMax.d(Layout, Index)
LayoutGridSetRow(Layout, Index = #Null, Size.d = #PG_Grid_Default, isPercent.b = #False)
LayoutGridGetRow.d(Layout, Index, *isPercent.Integer = #Null)
LayoutGridGetRowCount(Layout) ;- !!!! needs looking at
LayoutGridSetRowMin(Layout, Index = #Null, Size.d = #PG_Grid_Default)
LayoutGridGetRowMin.d(Layout, Index)
LayoutGridSetRowMax(Layout, Index = #Null, Size.d = #PG_Grid_Default)
LayoutGridGetRowMax.d(Layout, Index)
LayoutGridSetGapSize(Layout, Size.d)
LayoutGridGetGapSize(Layout, *Columns.Integer = #Null, *Rows.Integer = #Null)
LayoutGridSetGapSizeColumns(Layout, Size.d)
LayoutGridGetGapSizeColumns(Layout)
LayoutGridSetGapSizeRows(Layout, Size.d)
LayoutGridGetGapSizeRows(Layout)
LayoutGridSetSpanMode(Layout, SpanMode)
LayoutGridGetSpanMode(Layout, *Columns.Integer = #Null, *Rows.Integer = #Null)
LayoutGridSetSpanModeColumns(Layout, SpanMode)
LayoutGridGetSpanModeColumns(Layout)
LayoutGridSetSpanModeRows(Layout, SpanMode)
LayoutGridGetSpanModeRows(Layout)
LayoutGridSetJustifyContent(Layout, JustifyContent)
LayoutGridGetJustifyContent(Layout)
LayoutGridSetAlignContent(Layout, AlignContent)
LayoutGridGetAlignContent(Layout)
LayoutGridSetJustifyItems(Layout, JustifyItems)
LayoutGridGetJustifyItems(Layout)
LayoutGridSetAlignItems(Layout, AlignItems)
LayoutGridGetAlignItems(Layout)
LayoutGridSetColumnDefault(Layout, Size.d, isPercent.b = #False)
LayoutGridGetColumnDefault.d(Layout, *isPercent.Integer = #Null)
LayoutGridSetColumnMinDefault(Layout, Size.d)
LayoutGridGetColumnMinDefault.d(Layout)
LayoutGridSetColumnMaxDefault(Layout, Size.d)
LayoutGridGetColumnMaxDefault.d(Layout)
LayoutGridSetRowDefault(Layout, Size.d, isPercent.b = #False)
LayoutGridGetRowDefault.d(Layout, *isPercent.Integer = #Null)
LayoutGridSetRowMinDefault(Layout, Size.d)
LayoutGridGetRowMinDefault.d(Layout)
LayoutGridSetRowMaxDefault(Layout, Size.d)
LayoutGridGetRowMaxDefault.d(Layout)
Transition_CubicBezier.d(t.d, b.d, c.d, d.d, P1x.d, P1y.d, P2x.d, P2y.d)
Transition_Linear.d(t.d, b.d, c.d, d.d)
Transition_Ease.d(t.d, b.d, c.d, d.d)
Transition_EaseInQuad.d(t.d, b.d, c.d, d.d)
Transition_EaseOutQuad.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutQuad.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInQuad.d(t.d, b.d, c.d, d.d)
Transition_EaseInCubic.d(t.d, b.d, c.d, d.d)
Transition_EaseOutCubic.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutCubic.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInCubic.d(t.d, b.d, c.d, d.d)
Transition_EaseInQuart.d(t.d, b.d, c.d, d.d)
Transition_EaseOutQuart.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutQuart.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInQuart.d(t.d, b.d, c.d, d.d)
Transition_EaseInQuint.d(t.d, b.d, c.d, d.d)
Transition_EaseOutQuint.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutQuint.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInQuint.d(t.d, b.d, c.d, d.d)
Transition_EaseInSine.d(t.d, b.d, c.d, d.d)
Transition_EaseOutSine.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutSine.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInSine.d(t.d, b.d, c.d, d.d)
Transition_EaseInExpo.d(t.d, b.d, c.d, d.d)
Transition_EaseOutExpo.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutExpo.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInExpo.d(t.d, b.d, c.d, d.d)
Transition_EaseInCirc.d(t.d, b.d, c.d, d.d)
Transition_EaseOutCirc.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutCirc.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInCirc.d(t.d, b.d, c.d, d.d)
Transition_EaseInElastic.d(t.d, b.d, c.d, d.d, amplitude.d = 1, period.d = 0.3)
Transition_EaseOutElastic.d(t.d, b.d, c.d, d.d, amplitude.d = 1, period.d = 0.3)
Transition_EaseInOutElastic.d(t.d, b.d, c.d, d.d, amplitude.d = 1, period.d = 0.3)
Transition_EaseOutInElastic.d(t.d, b.d, c.d, d.d)
Transition_EaseInElastic2.d(t.d, b.d, c.d, d.d, easeInRatio.d = 0.2, amplitude.d = 10, wobbleAmount.d = 3)
Transition_EaseOutElastic2.d(t.d, b.d, c.d, d.d, easeInRatio.d = 0.2, amplitude.d = 10, wobbleAmount.d = 3)
Transition_EaseInBack.d(t.d, b.d, c.d, d.d, backAmount.d = 1.70158)
Transition_EaseOutBack.d(t.d, b.d, c.d, d.d, backAmount.d = 1.70158)
Transition_EaseInOutBack.d(t.d, b.d, c.d, d.d, backAmount.d = 1.70158)
Transition_EaseOutInBack.d(t.d, b.d, c.d, d.d, backAmount.d = 1.70158)
Transition_EaseOutBounce.d(t.d, b.d, c.d, d.d)
Transition_EaseInBounce.d(t.d, b.d, c.d, d.d)
Transition_EaseInOutBounce.d(t.d, b.d, c.d, d.d)
Transition_EaseOutInBounce.d(t.d, b.d, c.d, d.d)
StartAnimation(Object, ID = #PG_Any, Duration = 0, FPS = #Null, IsContinue.b = #False)
StopAnimation(Object, ID)
CreateWindow(x, y, Width, Height, Title.s = "", Flags = #Null, ParentWindowID = #Null)
OutputWindow(Window, *UpdateRect.RECT = #Null)
WindowGetLayout(Window)
WindowGetWidth.d(Window, Flags.i = #Null)
WindowGetHeight.d(Window, Flags.i = #Null)
WindowGetX(Window, Flags.i = #Null)
WindowGetY(Window, Flags.i = #Null)
WindowGetDpiX.d(Window)
WindowGetDpiY.d(Window)
WindowGetDpiScaleX.d(Window)
WindowGetDpiScaleY.d(Window)
WindowSetMouseCapture(Window)
WindowReleaseMouseCapture()
WindowRedraw(Window, *Rect.RECT = #Null)
WindowUpdate(Window)
WindowResize(Window, x, y, Width, Height)
WindowShow(Window, isVisible = #True, Flags = #Null)
WindowSetTitle(Window, Title.s)
WindowGetID(Window)
CreateWidget(x, y, Width, Height, *UserData = #Null, Flags = #Null)
CreateOsWidget(x, y, Width, Height, OS_ID)
WidgetSetName(Widget, Name.s)
WidgetShow(Widget, Visibility = #Null)
WidgetSetLayout(Widget, Layout)
WidgetGetLayout(Widget)
WidgetSetUserData(Widget, UserData)
WidgetGetUserData(Widget)
WidgetSetMouseCapture(Widget)
WidgetReleaseMouseCapture()
WidgetSetCursor(Widget, Cursor)
WidgetGetParentWindow(Widget)
WidgetSetWidth(Widget, Width.d)
WidgetGetWidth.d(Widget, ReturnLayoutDefined.b = #False)
WidgetSetHeight(Widget, Height.d)
WidgetGetHeight.d(Widget, ReturnLayoutDefined.b = #False)
WidgetGetX.d(Widget, ReturnLayoutDefined.b = #False)
WidgetGetY.d(Widget, ReturnLayoutDefined.b = #False)
WidgetSetMinWidth(Widget, Width.d)
WidgetGetMinWidth.d(Widget)
WidgetSetMinHeight(Widget, Height.d)
WidgetGetMinHeight.d(Widget)
WidgetSetMargin(Widget, Margin)
WidgetGetMargin(Widget, *MarginLeft.Integer = #Null, *MarginTop.Integer = #Null, *MarginRight.Integer = #Null, *MarginBottom.Integer = #Null)
WidgetSetMarginLeft(Widget, Margin)
WidgetGetMarginLeft(Widget)
WidgetSetMarginTop(Widget, Margin)
WidgetGetMarginTop(Widget)
WidgetSetMarginRight(Widget, Margin)
WidgetGetMarginRight(Widget)
WidgetSetMarginBottom(Widget, Margin)
WidgetGetMarginBottom(Widget)
WidgetSetJustify(Widget, Justify)
WidgetGetJustify(Widget)
WidgetSetAlign(Widget, Align)
WidgetGetAlign(Widget)
WidgetSetColumnStart(Widget, Column)
WidgetGetColumnStart(Widget)
WidgetSetColumnSpan(Widget, Span)
WidgetGetColumnSpan(Widget)
WidgetSetRowStart(Widget, Row)
WidgetGetRowStart(Widget)
WidgetSetRowSpan(Widget, Span)
WidgetGetRowSpan(Widget)
WidgetSetBorder(Widget, Border)
WidgetSetOpacity(Widget, Opacity.f)
WidgetGetOpacity.f(Widget)
WidgetRedraw(Widget, *Rect.RECT = #Null, RedrawFlags = #Null)
WidgetUpdate(Widget)
WidgetResize(Widget, x.d, y.d, Width.d, Height.d)
WidgetFree(Widget)
CreateScrollBar(x, y, Width, Height, Minimum, Maximum, PageSize, Flags = #Null)
ScrollBarSetValues(ScrollBar, Position = #PG_Ignore, Minimum = #PG_Ignore, Maximum = #PG_Ignore, PageSize = #PG_Ignore)
CreateWebView(x, y, Width, Height, URL.s = "", Flags = #Null)
WebViewNavigate(Webview, URL.s)
StartProGUI(GfxDriver = #Null)
StopProGUI()
RegisterDummyWindow(WindowID)
Code: Select all
; Event constants
#PG_Event_Draw = 0
#PG_Event_DrawForeground = 1
#PG_Event_Action = 2
#PG_Event_Animate = 3
#PG_Event_MouseLeftButtonDown = 4
#PG_Event_MouseLeftButtonUp = 5
#PG_Event_MouseLeftDoubleClick = 6
#PG_Event_MouseEnter = 7
#PG_Event_MouseLeave = 8
#PG_Event_MouseMove = 9
#PG_Event_MouseRightButtonDown = 10
#PG_Event_MouseRightButtonUp = 11
#PG_Event_MouseRightDoubleClick = 12
#PG_Event_MouseWheel = 13
#PG_Event_Destroy = 14
#PG_Event_WindowClose = 15
#PG_Event_DPI = 16
; Animation event states
#PG_Event_Animate_Start = 0
#PG_Event_Animate_Update = 1
#PG_Event_Animate_End = 2
; Ignore parameter
#PG_Ignore = -65535
#PG_Any = -1
; Render sub-systems
#PG_InvalidDriver = 0
#PG_RenderDirect2D = 1
#PG_RenderCairo = 2
; Window creation flags
#PG_Window_MinimizeWidget = $1
#PG_Window_MaximizeWidget = $2
#PG_Window_Minimize = $4
#PG_Window_Maximize = $8
#PG_Window_Sizeable = $10
#PG_Window_Borderless = $20
#PG_Window_BackgroundDrag = $40
#PG_Window_LayoutFlex = $80
#PG_Window_LayoutGrid = $100
; Window visibility flags
#PG_Window_NoActivate = $4
#PG_Window_ScreenCentered = $8
#PG_Window_WindowCentered = $10
#PG_Window_NoUpdate = $20
; Widget flags
#PG_Widget_Hide = $1
#PG_Widget_NoDraw = $2
#PG_Widget_NoMouse = $4
#PG_Widget_LayoutBasic = $8
#PG_Widget_LayoutFlex = $10
#PG_Widget_LayoutGrid = $20
#PG_Widget_FirstUserFlag = $40
; Widget cursors
#PG_Cursor_Default = 0
#PG_Cursor_Cross = 1
#PG_Cursor_IBeam = 2
#PG_Cursor_Hand = 3
#PG_Cursor_Busy = 4
#PG_Cursor_Denied = 5
#PG_Cursor_Arrows = 6
#PG_Cursor_LeftRight = 7
#PG_Cursor_UpDown = 8
#PG_Cursor_LeftUpRightDown = 9
#PG_Cursor_LeftDownRightUp = 10
#PG_Cursor_Invisible = 11
; Widget / Window redraw / update flags
#PG_Redraw_AllChildren = $2
; ScrollBar flags
#PG_ScrollBar_Vertical = $40
#PG_Img_Transparent = -1
; Img property flags
#PG_Img_SnapToSize = $1
; Img pixel formats
#PG_Img_Format_BGRA32 = 0
#PG_Img_Format_A8 = 1
; Interpolation modes
#PG_InterpolationMode_Linear = 0
#PG_InterpolationMode_Nearest = 1
#PG_InterpolationMode_Cubic = 2
#PG_InterpolationMode_MultiSampleLinear = 3
#PG_InterpolationMode_Anisotropic = 4
#PG_InterpolationMode_HighQualityCubic = 5
; Brush extend modes
#PG_Brush_ExtendMode_None = 0
#PG_Brush_ExtendMode_Repeat = 1
#PG_Brush_ExtendMode_Mirror = 2
#PG_Brush_ExtendMode_Pad = 3
; Stroke flags
#PG_Stroke_Dash = $1
#PG_Stroke_Dot = $2
#PG_Stroke_CustomDash = $4
#PG_Stroke_NoDPIScaling = $8
#PG_Stroke_RoundEnd = $10
#PG_Stroke_SquareEnd = $20
#PG_Stroke_RoundCorner = $40
#PG_Stroke_BevelCorner = $80
#PG_Stroke_Center = $100
#PG_Stroke_Outside = $200
; CreateBorderImg flags
#PG_BorderImg_NoMask = $1
#PG_BorderImg_MaskOnly = $2
#PG_BorderImg_Stretch = $4
#PG_BorderImg_Repeat = $8
#PG_BorderImg_RepeatRound = $10
#PG_BorderImg_Round = $20
#PG_BorderImg_Space = $40
#PG_BorderImg_StretchLeft = $80
#PG_BorderImg_StretchTop = $100
#PG_BorderImg_StretchRight = $200
#PG_BorderImg_StretchBottom = $400
#PG_BorderImg_RepeatLeft = $800
#PG_BorderImg_RepeatTop = $1000
#PG_BorderImg_RepeatRight = $2000
#PG_BorderImg_RepeatBottom = $4000
#PG_BorderImg_RepeatRoundLeft = $8000
#PG_BorderImg_RepeatRoundTop = $10000
#PG_BorderImg_RepeatRoundRight = $20000
#PG_BorderImg_RepeatRoundBottom = $40000
#PG_BorderImg_RoundLeft = $80000
#PG_BorderImg_RoundTop = $100000
#PG_BorderImg_RoundRight = $200000
#PG_BorderImg_RoundBottom = $400000
#PG_BorderImg_SpaceLeft = $800000
#PG_BorderImg_SpaceTop = $1000000
#PG_BorderImg_SpaceRight = $2000000
#PG_BorderImg_SpaceBottom = $4000000
#PG_BorderImg_CenterStretch = $8000000
#PG_BorderImg_CenterTile = $10000000
#PG_BorderImg_MinSizeShrink = $20000000
; CreateBorder style flags
#PG_Border_NoMask = $1
#PG_Border_MaskOnly = $2
#PG_Border_Solid = $4
#PG_Border_Double = $8
#PG_Border_Inset = $10
#PG_Border_Outset = $20
#PG_Border_Groove = $40
#PG_Border_Ridge = $80
#PG_Border_Dot = $100
#PG_Border_Dash = $200
#PG_Border_LeftSolid = $400
#PG_Border_LeftDouble = $800
#PG_Border_LeftInset = $1000
#PG_Border_LeftOutset = $2000
#PG_Border_LeftGroove = $4000
#PG_Border_LeftRidge = $8000
#PG_Border_LeftDot = $10000
#PG_Border_LeftDash = $20000
#PG_Border_TopSolid = $40000
#PG_Border_TopDouble = $80000
#PG_Border_TopInset = $100000
#PG_Border_TopOutset = $200000
#PG_Border_TopGroove = $400000
#PG_Border_TopRidge = $800000
#PG_Border_TopDot = $1000000
#PG_Border_TopDash = $2000000
#PG_Border_RightSolid = $4000000
#PG_Border_RightDouble = $8000000
#PG_Border_RightInset = $10000000
#PG_Border_RightOutset = $20000000
#PG_Border_RightGroove = $40000000
#PG_Border_RightRidge = $80000000
#PG_Border_RightDot = $100000000
#PG_Border_RightDash = $200000000
#PG_Border_BottomSolid = $400000000
#PG_Border_BottomDouble = $800000000
#PG_Border_BottomInset = $1000000000
#PG_Border_BottomOutset = $2000000000
#PG_Border_BottomGroove = $4000000000
#PG_Border_BottomRidge = $8000000000
#PG_Border_BottomDot = $10000000000
#PG_Border_BottomDash = $20000000000
#PG_Border_MaskInside = $40000000000
; DrawBorder flags
#PG_DrawBorder_FillInside = $1
#PG_DrawBorder_NoMask = $2
#PG_DrawBorder_MaskOnly = $4
#PG_DrawBorder_DrawMask = $8
; Text justify modes
#PG_Text_Justify_Leading = 0
#PG_Text_Justify_Trailing = 1
#PG_Text_Justify_Center = 2
#PG_Text_Justify_Justified = 3
; Text align modes
#PG_Text_Align_Top = 0
#PG_Text_ALign_Bottom = 1
#PG_Text_Align_Center = 2
; Text weight modes
#PG_Text_Weight_Thin = 100
#PG_Text_Weight_ExtraLight = 200
#PG_Text_Weight_Light = 300
#PG_Text_Weight_SemiLight = 350
#PG_Text_Weight_Normal = 400
#PG_Text_Weight_Medium = 500
#PG_Text_Weight_SemiBold = 600
#PG_Text_Weight_Bold = 700
#PG_Text_Weight_ExtraBold = 800
#PG_Text_Weight_Black = 900
#PG_Text_Weight_ExtraBlack = 950
; Text style modes
#PG_Text_Style_Normal = 0
#PG_Text_Style_Oblique = 1
#PG_Text_Style_Italic = 2
; Text word wrap modes
#PG_Text_Wrap_None = 0
#PG_Text_Wrap_Wrap = 1
#PG_Text_Wrap_EmergencyBreak = 2
#PG_Text_Wrap_WholeWord = 3
#PG_Text_Wrap_Character = 4
; Text trimming modes
#PG_Text_Trimming_None = 0
#PG_Text_Trimming_Character = 1
#PG_Text_Trimming_Word = 2
; Path flags
#PG_Path_Preserve = $1
#PG_Path_Winding = $2
#PG_Path_Relative = $4
; Antialias modes
#PG_Antialias_PerPrimitive = 0
#PG_Antialias_Aliased = 1
; Blend mode
#PG_Blend_SourceOver = 0
#PG_Blend_Copy = 1
#PG_Blend_Min = 2
#PG_Blend_Add = 3
#PG_Blend_Max = 4
#PG_DrawDPI_Auto = -1
; Layout engine types
#PG_Layout_Type_Basic = 0
#PG_Layout_Type_Flex = 1
#PG_Layout_Type_Grid = 2
; Layout properties
#PG_Layout_Padding = 0
#PG_Layout_PaddingTop = 1
#PG_Layout_PaddingLeft = 2
#PG_Layout_PaddingBottom = 3
#PG_Layout_PaddingRight = 4
#PG_Flex_Direction = 5
#PG_Flex_Wrap = 6
#PG_Flex_Justify = 7
#PG_Flex_AlignItems = 8
#PG_Flex_AlignContent = 9
#PG_Grid_TemplateColumnSize = 10
#PG_Grid_TemplateColumnMinSize = 11
#PG_Grid_TemplateColumnMaxSize = 12
#PG_Grid_TemplateRowSize = 13
#PG_Grid_TemplateRowMinSize = 14
#PG_Grid_TemplateRowMaxSize = 15
#PG_Grid_GapSize = 16
#PG_Grid_GapSizeColumns = 17
#PG_Grid_GapSizeRows = 18
#PG_Grid_JustifyContent = 19
#PG_Grid_AlignContent = 20
#PG_Grid_JustifyItems = 21
#PG_Grid_AlignItems = 22
#PG_Grid_Flow = 23
#PG_Grid_DefaultColumnSize = 24
#PG_Grid_DefaultColumnMinSize = 25
#PG_Grid_DefaultColumnMaxSize = 26
#PG_Grid_DefaultRowSize = 27
#PG_Grid_DefaultRowMinSize = 28
#PG_Grid_DefaultRowMaxSize = 29
#PG_Grid_SpanMode = 30
#PG_Grid_SpanModeColumns = 31
#PG_Grid_SpanModeRows = 32
; Flex direction property values
#PG_Flex_Direction_Row = 0
#PG_Flex_Direction_RowReverse = 1
#PG_Flex_Direction_Column = 2
#PG_Flex_Direction_ColumnReverse = 3
; Flex wrapping property values
#PG_Flex_Wrap_None = 0
#PG_Flex_Wrap_Enabled = 1
; Flex justify property values
#PG_Flex_Justify_Start = 1
#PG_Flex_Justify_Center = 2
#PG_Flex_Justify_End = 3
#PG_Flex_Justify_SpaceAround = 4
#PG_Flex_Justify_SpaceBetween = 5
; Flex align items property values
#PG_Flex_AlignItems_Stretch = 0
#PG_Flex_AlignItems_Start = 1
#PG_Flex_AlignItems_Center = 2
#PG_Flex_AlignItems_End = 3
#PG_Flex_AlignItems_Baseline = 4
; Flex align content property values
#PG_Flex_AlignContent_Start = 0
#PG_Flex_AlignContent_Center = 1
#PG_Flex_AlignContent_End = 2
#PG_Flex_AlignContent_SpaceAround = 3
#PG_Flex_AlignContent_SpaceBetween = 4
#PG_Flex_AlignContent_Stretch = 5
; Layout flags
#PG_Layout_NoUpdate = $1
#PG_Grid_Percent = $2
; Grid justify content property values
#PG_Grid_JustifyContent_Start = 0
#PG_Grid_JustifyContent_Center = 1
#PG_Grid_JustifyContent_End = 2
#PG_Grid_JustifyContent_SpaceAround = 3
#PG_Grid_JustifyContent_SpaceBetween = 4
#PG_Grid_JustifyContent_SpaceEvenly = 5
; Grid align content property values
#PG_Grid_AlignContent_Start = 0
#PG_Grid_AlignContent_Center = 1
#PG_Grid_AlignContent_End = 2
#PG_Grid_AlignContent_SpaceAround = 3
#PG_Grid_AlignContent_SpaceBetween = 4
#PG_Grid_AlignContent_SpaceEvenly = 5
; Grid justify items property values
#PG_Grid_JustifyItems_Start = 0
#PG_Grid_JustifyItems_Center = 1
#PG_Grid_JustifyItems_End = 2
; Grid Align items property values
#PG_Grid_AlignItems_Start = 0
#PG_Grid_AlignItems_Center = 1
#PG_Grid_AlignItems_End = 2
; Grid flow property values
#PG_Grid_Flow_Row = 0
#PG_Grid_Flow_RowDense = 1
#PG_Grid_Flow_Column = 2
#PG_Grid_Flow_ColumnDense = 3
; Grid span mode property values
#PG_Grid_SpanMode_Tight = 0
#PG_Grid_SpanMode_Even = 1
; Grid column/row template/auto property values
#PG_Grid_MaxContent = -3
#PG_Grid_Auto = -2
#PG_Grid_Default = -1
; Layout item properties
#PG_Layout_Item_Visiblity = 0
#PG_Layout_Item_MinWidth = 1
#PG_Layout_Item_MinHeight = 2
#PG_Layout_Item_IdealWidth = 3
#PG_Layout_Item_IdealHeight = 4
#PG_Layout_Item_Margin = 5
#PG_Layout_Item_MarginTop = 6
#PG_Layout_Item_MarginLeft = 7
#PG_Layout_Item_MarginBottom = 8
#PG_Layout_Item_MarginRight = 9
#PG_Layout_Item_Justify = 10
#PG_Layout_Item_Align = 11
#PG_Layout_Item_RowStart = 12
#PG_Layout_Item_RowSpan = 13
#PG_Layout_Item_ColumnStart = 14
#PG_Layout_Item_ColumnSpan = 15
#PG_Layout_FitContent = -1
; Layout item flags
#PG_Layout_Item_Justify_Start = $20000
#PG_Layout_Item_Justify_Center = $40000
#PG_Layout_Item_Justify_End = $80000
#PG_Layout_Item_Align_Start = $100000
#PG_Layout_Item_Align_Center = $200000
#PG_Layout_Item_Align_End = $400000
; Layout item visibility property values
#PG_Layout_Item_Show = 0
#PG_Layout_Item_Hide = 1
#PG_Layout_Item_NoDraw = 2
; Window coordinate/size constants
#PG_Window_InnerCoordinate = $1
#PG_Window_OuterCoordinate = $2
#PG_Window_ReturnPixels = $4
; Widget justify
#PG_Widget_Justify_Start = #PG_Layout_Item_Justify_Start
#PG_Widget_Justify_Center = #PG_Layout_Item_Justify_Center
#PG_Widget_Justify_End = #PG_Layout_Item_Justify_End
; Widget align
#PG_Widget_Align_Start = #PG_Layout_Item_Align_Start
#PG_Widget_Align_Center = #PG_Layout_Item_Align_Center
#PG_Widget_Align_End = #PG_Layout_Item_Align_End
#PG_Widget_FitContent = #PG_Layout_FitContent
Chris.