mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
ConfigDialog: Don't enforce 0x0 dimensions on initial display
FrameContainer now behaves like other widgets, and no longer re-computes dimensions in paintTo *if you provide a dimen*. Since we do here, for.... reasons I'm not entirely sure still make any sense, make sure we actually compute valid dimensions, instead of an empty rect from Geom:new ;). Fix #11389
This commit is contained in:
@@ -673,10 +673,10 @@ function ReaderPaging:onInitScrollPageStates(orig_mode)
|
||||
if self.view.page_scroll and self.view.state.page then
|
||||
self.orig_page = self.current_page
|
||||
self.view.page_states = {}
|
||||
local blank_area = Geom:new{}
|
||||
local blank_area = Geom:new()
|
||||
blank_area:setSizeTo(self.view.visible_area)
|
||||
while blank_area.h > 0 do
|
||||
local offset = Geom:new{}
|
||||
local offset = Geom:new()
|
||||
-- caculate position in current page
|
||||
if self.current_page == self.orig_page then
|
||||
local page_area = self.view:getPageArea(
|
||||
@@ -823,7 +823,7 @@ function ReaderPaging:genPageStatesFromTop(top_page_state, blank_area, offset)
|
||||
current_page = self.ui.document:getNextPage(current_page)
|
||||
if current_page == 0 then break end -- end of document reached
|
||||
self:_gotoPage(current_page, "scrolling")
|
||||
state = self:getNextPageState(blank_area, Geom:new{})
|
||||
state = self:getNextPageState(blank_area, Geom:new())
|
||||
table.insert(page_states, state)
|
||||
end
|
||||
end
|
||||
@@ -848,7 +848,7 @@ function ReaderPaging:genPageStatesFromBottom(bottom_page_state, blank_area, off
|
||||
current_page = self.ui.document:getPrevPage(current_page)
|
||||
if current_page == 0 then break end -- start of document reached
|
||||
self:_gotoPage(current_page, "scrolling")
|
||||
state = self:getPrevPageState(blank_area, Geom:new{})
|
||||
state = self:getPrevPageState(blank_area, Geom:new())
|
||||
table.insert(page_states, 1, state)
|
||||
end
|
||||
end
|
||||
@@ -869,7 +869,7 @@ function ReaderPaging:onScrollPanRel(diff)
|
||||
if diff == 0 then return true end
|
||||
logger.dbg("pan relative height:", diff)
|
||||
local offset = Geom:new{x = 0, y = diff}
|
||||
local blank_area = Geom:new{}
|
||||
local blank_area = Geom:new()
|
||||
blank_area:setSizeTo(self.view.visible_area)
|
||||
local new_page_states
|
||||
if diff > 0 then
|
||||
@@ -913,7 +913,7 @@ function ReaderPaging:onScrollPageRel(page_diff)
|
||||
return true
|
||||
end
|
||||
|
||||
local blank_area = Geom:new{}
|
||||
local blank_area = Geom:new()
|
||||
blank_area:setSizeTo(self.view.visible_area)
|
||||
local overlap = self.overlap
|
||||
local offset = Geom:new{
|
||||
@@ -923,7 +923,7 @@ function ReaderPaging:onScrollPageRel(page_diff)
|
||||
self.view.page_states = self:genPageStatesFromTop(last_page_state, blank_area, offset)
|
||||
elseif page_diff < 0 then
|
||||
-- page up, first page should be moved to bottom
|
||||
local blank_area = Geom:new{}
|
||||
local blank_area = Geom:new()
|
||||
blank_area:setSizeTo(self.view.visible_area)
|
||||
local overlap = self.overlap
|
||||
local first_page_state = table.remove(self.view.page_states, 1)
|
||||
|
||||
@@ -418,7 +418,7 @@ function ReaderView:getScrollPagePosition(pos)
|
||||
end
|
||||
|
||||
function ReaderView:getScrollPageRect(page, rect_p)
|
||||
local rect_s = Geom:new{}
|
||||
local rect_s = Geom:new()
|
||||
for _, state in ipairs(self.page_states) do
|
||||
local trans_p = Geom:new(rect_p):copy()
|
||||
trans_p:transformByScale(state.zoom, state.zoom)
|
||||
@@ -463,7 +463,7 @@ function ReaderView:getSinglePagePosition(pos)
|
||||
end
|
||||
|
||||
function ReaderView:getSinglePageRect(rect_p)
|
||||
local rect_s = Geom:new{}
|
||||
local rect_s = Geom:new()
|
||||
local trans_p = Geom:new(rect_p):copy()
|
||||
trans_p:transformByScale(self.state.zoom, self.state.zoom)
|
||||
if self.visible_area:intersectWith(trans_p) then
|
||||
|
||||
@@ -921,7 +921,7 @@ function ConfigDialog:update()
|
||||
config_dialog = self,
|
||||
}
|
||||
|
||||
local old_dimen = self.dialog_frame and self.dialog_frame.dimen and self.dialog_frame.dimen:copy() or Geom:new{}
|
||||
local old_dimen = self.dialog_frame and self.dialog_frame.dimen and self.dialog_frame.dimen:copy() or Geom:new()
|
||||
self.dialog_frame = FrameContainer:new{
|
||||
background = Blitbuffer.COLOR_WHITE,
|
||||
padding_bottom = 0, -- ensured by MenuBar
|
||||
@@ -930,9 +930,6 @@ function ConfigDialog:update()
|
||||
self.config_menubar,
|
||||
},
|
||||
}
|
||||
-- Ensure we have a sane-ish Geom object *before* paintTo gets called,
|
||||
-- to avoid weirdness in race-y SwipeCloseMenu calls...
|
||||
self.dialog_frame.dimen = old_dimen
|
||||
|
||||
-- Reset the focusmanager cursor
|
||||
self:moveFocusTo(self.panel_index, #self.layout, FocusManager.NOT_FOCUS)
|
||||
@@ -941,6 +938,16 @@ function ConfigDialog:update()
|
||||
dimen = Screen:getSize(),
|
||||
self.dialog_frame,
|
||||
}
|
||||
|
||||
-- Ensure we have a sane Geom object *before* paintTo gets called,
|
||||
-- to avoid weirdness in strange race-y SwipeCloseMenu calls...
|
||||
local dialog_size = self.dialog_frame:getSize()
|
||||
self.dialog_frame.dimen = Geom:new{
|
||||
x = old_dimen.x,
|
||||
y = old_dimen.y,
|
||||
w = dialog_size.w,
|
||||
h = dialog_size.h
|
||||
}
|
||||
end
|
||||
|
||||
function ConfigDialog:onCloseWidget()
|
||||
|
||||
@@ -171,7 +171,7 @@ function DoubleSpinWidget:update(numberpicker_left_value, numberpicker_right_val
|
||||
left_vertical_group,
|
||||
},
|
||||
CenterContainer:new{
|
||||
dimen = Geom:new{},
|
||||
dimen = Geom:new(),
|
||||
separator_vertical_group,
|
||||
},
|
||||
CenterContainer:new{
|
||||
|
||||
@@ -17,7 +17,7 @@ end
|
||||
function FixedTextWidget:getSize()
|
||||
self:updateSize()
|
||||
if self._length == 0 then
|
||||
return Geom:new{}
|
||||
return Geom:new()
|
||||
end
|
||||
return TextWidget.getSize(self)
|
||||
end
|
||||
|
||||
@@ -483,7 +483,7 @@ function TouchMenu:init()
|
||||
-- borders are pushed off-(screen-)width and so not visible.
|
||||
-- We'll then be similar to bottom menu ConfigDialog (where this
|
||||
-- nice effect is caused by some width calculations bug).
|
||||
if not self.dimen then self.dimen = Geom:new{} end
|
||||
if not self.dimen then self.dimen = Geom:new() end
|
||||
self.show_parent = self.show_parent or self
|
||||
if not self.close_callback then
|
||||
self.close_callback = function()
|
||||
|
||||
Reference in New Issue
Block a user