12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # author: Ethosa
- import
- ../thirdparty/opengl,
- ../core/vector2,
- ../core/rect2,
- ../core/anchor,
- ../core/input,
- ../core/color,
- ../nodes/node,
- control
- type
- VProgressBarObj* = object of ControlPtr
- max_value*, value*: uint
- progress_color*: ColorRef
- thumb_color*: ColorRef
- VProgressBarPtr* = ptr VProgressBarObj
- proc VProgressBar*(name: string, variable: var VProgressBarObj): VProgressBarPtr =
- nodepattern(VProgressBarObj)
- controlpattern()
- variable.background_color = Color(1f, 1f, 1f)
- variable.rect_size.x = 40
- variable.rect_size.y = 120
- variable.progress_color = Color(0.5, 0.5, 0.5)
- variable.thumb_color = Color(0.7, 0.7, 0.7)
- variable.max_value = 100
- variable.value = 0
- proc VProgressBar*(obj: var VProgressBarObj): VProgressBarPtr {.inline.} =
- VProgressBar("VProgressBar", obj)
- method draw*(self: VProgressBarPtr, w, h: GLfloat) =
- self.calcGlobalPosition()
- let
- x = -w/2 + self.global_position.x
- y = h/2 - self.global_position.y
- # Background
- glColor4f(self.background_color.r, self.background_color.g, self.background_color.b, self.background_color.a)
- glRectf(x, y, x + self.rect_size.x, y - self.rect_size.y)
- # Progress
- let progress = self.rect_size.y * (self.value.float / self.max_value.float)
- glColor4f(self.progress_color.r, self.progress_color.g, self.progress_color.b, self.progress_color.a)
- glRectf(x, y - self.rect_size.y + progress, x + self.rect_size.x, y - self.rect_size.y)
- # Press
- if self.pressed:
- self.press(last_event.x, last_event.y)
- method dublicate*(self: VProgressBarPtr, obj: var VProgressBarObj): VProgressBarPtr {.base.} =
- obj = self[]
- obj.addr
- method setMaxValue*(self: VProgressBarPtr, value: uint) {.base.} =
- if value > self.value:
- self.max_value = value
- else:
- self.max_value = self.value
- method setProgress*(self: VProgressBarPtr, value: uint) {.base.} =
- if value > self.max_value:
- self.value = self.max_value
- else:
- self.value = value
- method setProgressColor*(self: VProgressBarPtr, color: ColorRef) {.base.} =
- ## Changes progress color.
- ## For change background color use `setBackgroundColor` method.
- self.progress_color = color
|