wui_ctx.go 1020 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // package wui_ctx -- глобальный контекст графики.
  2. package wui_ctx
  3. import (
  4. "fmt"
  5. "sync"
  6. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  7. mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  9. mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
  10. )
  11. var (
  12. wCtx mWt.IWuiCtx
  13. block sync.Mutex
  14. )
  15. // GetWuiCtx -- возвращает глобальный контекст графики.
  16. func GetWuiCtx() *mL0.Result[mWt.IWuiCtx] {
  17. block.Lock()
  18. defer block.Unlock()
  19. if wCtx != nil {
  20. return mL0.NewRes(wCtx)
  21. }
  22. resKernCtx := kctx.GetKernelCtx()
  23. if resKernCtx.IsErr() {
  24. err := fmt.Errorf("GetWuiCtx(): in get kCtx, err=\n\t%w", resKernCtx.Err())
  25. return mL0.NewErr[mWt.IWuiCtx](err)
  26. }
  27. kCtx := resKernCtx.Val()
  28. resWuiCtx := mL1.NewLocalCtx(kCtx.Ctx())
  29. if resWuiCtx.IsErr() {
  30. err := fmt.Errorf("GetWuiCtx(): in new localCtx, err=\n\t%w", resWuiCtx.Err())
  31. return mL0.NewErr[mWt.IWuiCtx](err)
  32. }
  33. wCtx = resWuiCtx.Val()
  34. return mL0.NewRes(wCtx)
  35. }