* complete scrollbar skin * implement scrollbar functionality (scrolling with mouse) * fix onMouseClick issues * add tabs in options (graphics and general tab) * add new option for limiting frame rate using scrollbar * add new widget property "clipping" that will be used on scrollable areasmaster
parent
de0008caf1
commit
179e53bb77
@ -0,0 +1,28 @@
|
|||||||
|
Panel
|
||||||
|
OptionCheckBox
|
||||||
|
id: classicControl
|
||||||
|
text: Classic control
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showInfoMessagesInConsole
|
||||||
|
text: Show info messages in console
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showEventMessagesInConsole
|
||||||
|
text: Show event messages in console
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showStatusMessagesInConsole
|
||||||
|
text: Show status messages in console
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showTimestampsInConsole
|
||||||
|
text: Show timestamps in console
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showLevelsInConsole
|
||||||
|
text: Show levels in console
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showPrivateMessagesInConsole
|
||||||
|
text: Show private messages in console
|
@ -0,0 +1,32 @@
|
|||||||
|
Panel
|
||||||
|
OptionCheckBox
|
||||||
|
id: vsync
|
||||||
|
text: Enable vertical synchronization
|
||||||
|
tooltip: Limits FPS to 60
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: showfps
|
||||||
|
text: Show frame rate
|
||||||
|
|
||||||
|
OptionCheckBox
|
||||||
|
id: fullscreen
|
||||||
|
text: Fullscreen
|
||||||
|
|
||||||
|
Label
|
||||||
|
text: Frame rate limit
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
margin-top: 6
|
||||||
|
|
||||||
|
HorizontalScrollBar
|
||||||
|
id: frameRateScrollBar
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
margin-top: 3
|
||||||
|
minimum: 0
|
||||||
|
maximum: 50
|
||||||
|
value: 0
|
||||||
|
step: 1
|
||||||
|
@onValueChange: g_app.setFrameSleep(self:getValue())
|
@ -0,0 +1,15 @@
|
|||||||
|
UIScrollArea = extends(UIWidget)
|
||||||
|
|
||||||
|
function UIScrollArea.create()
|
||||||
|
local scrollarea = UIScrollArea.internalCreate()
|
||||||
|
scrollarea:setClipping(true)
|
||||||
|
return scrollarea
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollArea:onStyleApply(styleName, styleNode)
|
||||||
|
for name,value in pairs(styleNode) do
|
||||||
|
if name == 'horizontal-scrollbar' then
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,30 +1,157 @@
|
|||||||
UIScrollBar = extends(UIWidget)
|
UIScrollBar = extends(UIWidget)
|
||||||
|
|
||||||
|
-- private functions
|
||||||
|
local function calcValues(self)
|
||||||
|
local slider = self:getChildById('sliderButton')
|
||||||
|
local decrementButton = self:getChildById('decrementButton')
|
||||||
|
local incrementButton = self:getChildById('incrementButton')
|
||||||
|
|
||||||
|
local pxrange, center
|
||||||
|
if self.orientation == 'vertical' then
|
||||||
|
pxrange = (self:getHeight() - decrementButton:getHeight() - decrementButton:getMarginTop() - decrementButton:getMarginBottom()
|
||||||
|
- incrementButton:getHeight() - incrementButton:getMarginTop() - incrementButton:getMarginBottom())
|
||||||
|
center = self:getY() + self:getHeight() / 2
|
||||||
|
else -- horizontal
|
||||||
|
pxrange = (self:getWidth() - decrementButton:getWidth() - decrementButton:getMarginLeft() - decrementButton:getMarginRight()
|
||||||
|
- incrementButton:getWidth() - incrementButton:getMarginLeft() - incrementButton:getMarginRight())
|
||||||
|
center = self:getX() + self:getWidth() / 2
|
||||||
|
end
|
||||||
|
|
||||||
|
local range = self.maximum - self.minimum + 1
|
||||||
|
local proportion = math.max(range*(self.step/range), 1)/range
|
||||||
|
local px = math.max(math.floor(proportion * pxrange), 10)
|
||||||
|
local offset = ((self.value / (range - 1)) - 0.5) * (pxrange - px)
|
||||||
|
|
||||||
|
return range, pxrange, px, offset, center
|
||||||
|
end
|
||||||
|
|
||||||
|
local function updateSlider(self)
|
||||||
|
local slider = self:getChildById('sliderButton')
|
||||||
|
if slider == nil then return end
|
||||||
|
|
||||||
|
local range, pxrange, px, offset, center = calcValues(self)
|
||||||
|
if self.orientation == 'vertical' then
|
||||||
|
slider:setHeight(px)
|
||||||
|
slider:setMarginTop(offset)
|
||||||
|
else -- horizontal
|
||||||
|
slider:setWidth(px)
|
||||||
|
slider:setMarginLeft(offset)
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.maximum == self.minimum then
|
||||||
|
self:disable()
|
||||||
|
else
|
||||||
|
self:enable()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parseSliderPos(self, pos)
|
||||||
|
local point
|
||||||
|
if self.orientation == 'vertical' then
|
||||||
|
point = pos.y
|
||||||
|
else
|
||||||
|
point = pos.x
|
||||||
|
end
|
||||||
|
local range, pxrange, px, offset, center = calcValues(self)
|
||||||
|
offset = math.min(math.max(point - center, -pxrange/2), pxrange/2)
|
||||||
|
local newvalue = math.floor(((offset / (pxrange - px)) + 0.5) * (range - 1))
|
||||||
|
self:setValue(newvalue)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- public functions
|
||||||
function UIScrollBar.create()
|
function UIScrollBar.create()
|
||||||
local scrollbar = UIScrollBar.internalCreate()
|
local scrollbar = UIScrollBar.internalCreate()
|
||||||
scrollbar:setFocusable(false)
|
scrollbar:setFocusable(false)
|
||||||
|
scrollbar.value = 0
|
||||||
|
scrollbar.minimum = 0
|
||||||
|
scrollbar.maximum = 0
|
||||||
|
scrollbar.step = 1
|
||||||
|
scrollbar.orientation = 'vertical'
|
||||||
return scrollbar
|
return scrollbar
|
||||||
end
|
end
|
||||||
|
|
||||||
function UIScrollBar:onSetup()
|
function UIScrollBar:onSetup()
|
||||||
--self.getChildById('upButton').onClick = function() self.navigateUp() end
|
addEvent(function()
|
||||||
--self.getChildById('upButton').onClick = function() self.navigateDown() end
|
Mouse.bindAutoPress(self:getChildById('decrementButton'), function() self:decrement() end)
|
||||||
end
|
Mouse.bindAutoPress(self:getChildById('incrementButton'), function() self:increment() end)
|
||||||
|
Mouse.bindPressMove(self:getChildById('sliderButton'), function(mousePos, mouseMoved) parseSliderPos(self, mousePos) end)
|
||||||
function UIScrollBar:attachWidget(widget)
|
updateSlider(self)
|
||||||
self.attachedWidget = widget
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function UIScrollBar:onStyleApply(styleName, styleNode)
|
function UIScrollBar:onStyleApply(styleName, styleNode)
|
||||||
if styleNode['attached-to'] then
|
for name,value in pairs(styleNode) do
|
||||||
local id = styleNode['attached-to']
|
if name == 'maximum' then
|
||||||
local parent = self:getParent()
|
self:setMaximum(tonumber(value))
|
||||||
local widget
|
elseif name == 'minimum' then
|
||||||
if id == 'parent' then
|
self:setMinimum(tonumber(value))
|
||||||
widget = parent
|
elseif name == 'step' then
|
||||||
elseif parent then
|
self:setStep(tonumber(value))
|
||||||
widget = parent:getChildById(id)
|
elseif name == 'orientation' then
|
||||||
|
self:setOrientation(value)
|
||||||
|
elseif name == 'value' then
|
||||||
|
self:setValue(value)
|
||||||
end
|
end
|
||||||
self:attachWidget(widget)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:decrement()
|
||||||
|
self:setValue(self.value - self.step)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:increment()
|
||||||
|
self:setValue(self.value + self.step)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setMaximum(maximum)
|
||||||
|
if maximum == self.maximum then return end
|
||||||
|
self.maximum = maximum
|
||||||
|
if self.value > maximum then
|
||||||
|
self:setValue(maximum)
|
||||||
|
else
|
||||||
|
updateSlider(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setMinimum(minimum)
|
||||||
|
if minimum == self.minimum then return end
|
||||||
|
self.minimum = minimum
|
||||||
|
if self.value < minimum then
|
||||||
|
self:setValue(minimum)
|
||||||
|
else
|
||||||
|
updateSlider(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setRange(minimum, maximum)
|
||||||
|
self:setMinimum(minimum)
|
||||||
|
self:setMaximum(maximum)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setValue(value)
|
||||||
|
value = math.max(math.min(value, self.maximum), self.minimum)
|
||||||
|
if self.value == value then return end
|
||||||
|
local delta = value - self.value
|
||||||
|
self.value = value
|
||||||
|
updateSlider(self)
|
||||||
|
signalcall(self.onValueChange, self, value, delta)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setStep(step)
|
||||||
|
self.step = step
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:setOrientation(orientation)
|
||||||
|
self.orientation = orientation
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:onGeometryChange()
|
||||||
|
updateSlider(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIScrollBar:getMaximum() return self.maximum end
|
||||||
|
function UIScrollBar:getMinimum() return self.minimum end
|
||||||
|
function UIScrollBar:getValue() return self.value end
|
||||||
|
function UIScrollBar:getStep() return self.step end
|
||||||
|
function UIScrollBar:getOrientation() return self.orientation end
|
||||||
|
After Width: | Height: | Size: 634 B |
Before Width: | Height: | Size: 350 B |
@ -1,30 +1,94 @@
|
|||||||
|
ScrollBarSlider < UIButton
|
||||||
|
id: sliderButton
|
||||||
|
anchors.centerIn: parent
|
||||||
|
size: 13 13
|
||||||
|
image-source: images/scrollbar.png
|
||||||
|
image-clip: 0 26 13 13
|
||||||
|
image-border: 2
|
||||||
|
image-color: #ffffffff
|
||||||
|
$hover:
|
||||||
|
image-clip: 13 26 13 13
|
||||||
|
$pressed:
|
||||||
|
image-clip: 26 26 13 13
|
||||||
|
$disabled:
|
||||||
|
image-color: #ffffff66
|
||||||
|
|
||||||
VerticalScrollBar < UIScrollBar
|
VerticalScrollBar < UIScrollBar
|
||||||
|
orientation: vertical
|
||||||
width: 13
|
width: 13
|
||||||
image-source: images/vscrollbar.png
|
height: 39
|
||||||
image-clip: 0 39 13 32
|
image-source: images/scrollbar.png
|
||||||
|
image-clip: 39 0 13 65
|
||||||
image-border: 1
|
image-border: 1
|
||||||
|
|
||||||
UIButton
|
UIButton
|
||||||
id: upButton
|
id: decrementButton
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.right: parent.right
|
anchors.left: parent.left
|
||||||
image-source: images/vscrollbar.png
|
image-source: images/scrollbar.png
|
||||||
image-clip: 0 0 13 13
|
image-clip: 0 0 13 13
|
||||||
|
image-color: #ffffffff
|
||||||
size: 13 13
|
size: 13 13
|
||||||
|
$hover:
|
||||||
|
image-clip: 13 0 13 13
|
||||||
|
$pressed:
|
||||||
|
image-clip: 26 0 13 13
|
||||||
|
$disabled:
|
||||||
|
image-color: #ffffff66
|
||||||
|
|
||||||
UIButton
|
UIButton
|
||||||
id: downButton
|
id: incrementButton
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
size: 13 13
|
size: 13 13
|
||||||
image-source: images/vscrollbar.png
|
image-source: images/scrollbar.png
|
||||||
image-clip: 0 13 13 13
|
image-clip: 0 13 13 13
|
||||||
|
image-color: #ffffffff
|
||||||
|
$hover:
|
||||||
|
image-clip: 13 13 13 13
|
||||||
|
$pressed:
|
||||||
|
image-clip: 26 13 13 13
|
||||||
|
$disabled:
|
||||||
|
image-color: #ffffff66
|
||||||
|
|
||||||
|
ScrollBarSlider
|
||||||
|
|
||||||
|
HorizontalScrollBar < UIScrollBar
|
||||||
|
orientation: horizontal
|
||||||
|
height: 13
|
||||||
|
width: 39
|
||||||
|
image-source: images/scrollbar.png
|
||||||
|
image-clip: 0 65 52 13
|
||||||
|
image-border: 1
|
||||||
|
|
||||||
|
UIButton
|
||||||
|
id: decrementButton
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
image-source: images/scrollbar.png
|
||||||
|
image-clip: 0 39 13 13
|
||||||
|
image-color: #ffffffff
|
||||||
|
size: 13 13
|
||||||
|
$hover:
|
||||||
|
image-clip: 13 39 13 13
|
||||||
|
$pressed:
|
||||||
|
image-clip: 26 39 13 13
|
||||||
|
$disabled:
|
||||||
|
image-color: #ffffff66
|
||||||
|
|
||||||
|
UIButton
|
||||||
|
id: incrementButton
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
size: 13 13
|
||||||
|
image-source: images/scrollbar.png
|
||||||
|
image-clip: 0 52 13 13
|
||||||
|
image-color: #ffffffff
|
||||||
|
$hover:
|
||||||
|
image-clip: 13 52 13 13
|
||||||
|
$pressed:
|
||||||
|
image-clip: 26 52 13 13
|
||||||
|
$disabled:
|
||||||
|
image-color: #ffffff66
|
||||||
|
|
||||||
//UIButton
|
ScrollBarSlider
|
||||||
//id: middleButton
|
|
||||||
//anchors.top: parent.top
|
|
||||||
//anchors.right: parent.right
|
|
||||||
//size: 13 13
|
|
||||||
//margin-top: 30
|
|
||||||
//image-source: images/vscrollbar.png
|
|
||||||
//image-clip: 0 26 13 13
|
|
||||||
|
Loading…
Reference in new issue