size.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // package size -- размер области
  2. package size
  3. import (
  4. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  5. )
  6. // Size -- размер области
  7. type Size struct {
  8. W_ alias.Width `json:"w"` // Высота
  9. H_ alias.Height `json:"h"` // Ширина
  10. }
  11. // NewSize -- возвращает новый размер
  12. func NewSize(key string, elem map[string]interface{}) *Size {
  13. var _lstSize []interface{}
  14. _size0, isOk := elem[key]
  15. if !isOk {
  16. _lstSize = []interface{}{400, 300}
  17. } else {
  18. fnConvert := func() {
  19. defer func() {
  20. if _panic := recover(); _panic != nil {
  21. _lstSize = []interface{}{400, 300}
  22. }
  23. }()
  24. _lstSize = _size0.([]interface{})
  25. }
  26. fnConvert()
  27. }
  28. w := alias.Width(400)
  29. h := alias.Height(300)
  30. if len(_lstSize) >= 2 {
  31. switch _lstSize[0].(type) {
  32. case int:
  33. w = alias.Width(_lstSize[0].(int))
  34. h = alias.Height(_lstSize[1].(int))
  35. case float64:
  36. fnConvert := func() {
  37. defer func() {
  38. if _panic := recover(); _panic != nil {
  39. w = alias.Width(400)
  40. h = alias.Height(300)
  41. }
  42. }()
  43. w = alias.Width(int(_lstSize[0].(float64)))
  44. h = alias.Height(int(_lstSize[1].(float64)))
  45. }
  46. fnConvert()
  47. }
  48. }
  49. sf := &Size{
  50. W_: w,
  51. H_: h,
  52. }
  53. return sf
  54. }
  55. // W -- возвращает ширину
  56. func (sf *Size) W() alias.Width {
  57. return sf.W_
  58. }
  59. // H -- возвращает высоту
  60. func (sf *Size) H() alias.Height {
  61. return sf.H_
  62. }
  63. // Size -- возвращает размер
  64. func (sf *Size) Size() (alias.Width, alias.Height) {
  65. return sf.W_, sf.H_
  66. }