wctx.go 972 B

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