vprogress_bar.nim 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # author: Ethosa
  2. import
  3. ../thirdparty/opengl,
  4. ../core/vector2,
  5. ../core/rect2,
  6. ../core/anchor,
  7. ../core/input,
  8. ../core/color,
  9. ../nodes/node,
  10. control
  11. type
  12. VProgressBarObj* = object of ControlPtr
  13. max_value*, value*: uint
  14. progress_color*: ColorRef
  15. thumb_color*: ColorRef
  16. VProgressBarPtr* = ptr VProgressBarObj
  17. proc VProgressBar*(name: string, variable: var VProgressBarObj): VProgressBarPtr =
  18. nodepattern(VProgressBarObj)
  19. controlpattern()
  20. variable.background_color = Color(1f, 1f, 1f)
  21. variable.rect_size.x = 40
  22. variable.rect_size.y = 120
  23. variable.progress_color = Color(0.5, 0.5, 0.5)
  24. variable.thumb_color = Color(0.7, 0.7, 0.7)
  25. variable.max_value = 100
  26. variable.value = 0
  27. proc VProgressBar*(obj: var VProgressBarObj): VProgressBarPtr {.inline.} =
  28. VProgressBar("VProgressBar", obj)
  29. method draw*(self: VProgressBarPtr, w, h: GLfloat) =
  30. self.calcGlobalPosition()
  31. let
  32. x = -w/2 + self.global_position.x
  33. y = h/2 - self.global_position.y
  34. # Background
  35. glColor4f(self.background_color.r, self.background_color.g, self.background_color.b, self.background_color.a)
  36. glRectf(x, y, x + self.rect_size.x, y - self.rect_size.y)
  37. # Progress
  38. let progress = self.rect_size.y * (self.value.float / self.max_value.float)
  39. glColor4f(self.progress_color.r, self.progress_color.g, self.progress_color.b, self.progress_color.a)
  40. glRectf(x, y - self.rect_size.y + progress, x + self.rect_size.x, y - self.rect_size.y)
  41. # Press
  42. if self.pressed:
  43. self.press(last_event.x, last_event.y)
  44. method dublicate*(self: VProgressBarPtr, obj: var VProgressBarObj): VProgressBarPtr {.base.} =
  45. obj = self[]
  46. obj.addr
  47. method setMaxValue*(self: VProgressBarPtr, value: uint) {.base.} =
  48. if value > self.value:
  49. self.max_value = value
  50. else:
  51. self.max_value = self.value
  52. method setProgress*(self: VProgressBarPtr, value: uint) {.base.} =
  53. if value > self.max_value:
  54. self.value = self.max_value
  55. else:
  56. self.value = value
  57. method setProgressColor*(self: VProgressBarPtr, color: ColorRef) {.base.} =
  58. ## Changes progress color.
  59. ## For change background color use `setBackgroundColor` method.
  60. self.progress_color = color