Commit Graph

2097 Commits

Author SHA1 Message Date
Jeremy Douglass
6f2a4bf243 Add Up Down navigation to FlowView
Adds vertical navigation (up down) to FlowView. This corresponds visually to the File Name list display -- especially when the flow pane is hidden, pressing up-down is the intuitive way to navigate up-down in the list.
2019-05-30 18:15:33 +02:00
Igor Kushnir
bb964c8566 Reader: eliminate SlideInitializer class
GoToFlow shared its YACReaderFlow flow object with SlideInitializer
objects it created. GoToFlow modified the flow object in the main thread
and SlideInitializer modified the flow object in its own thread without
any thread synchronization. The only reason this usually worked was the
timing: SlideInitializer finished its work before the next time GoToFlow
heavily accessed the flow object. This was a data race and thus
undefined behavior.

Additionally, this commit eliminates a memory leak:
a new SlideInitializer object was constructed each time a comic was
opened in YACReader. These objects were never destroyed.

SlideInitializer called PictureFlow::triggerRender() from its own
thread. This function restarted triggerTimer, which QTimer's API forbids
doing from another thread. This commit eliminates the following errors
from YACReader's standard output:
    QObject::killTimer: Timers cannot be stopped from another thread
    QObject::startTimer: Timers cannot be started from another thread

Without this fix YACReader on GNU/Linux often uses an entire CPU core
from launch till exit if hardware acceleration is disabled (#56).

The data race could alternatively be fixed by adding thread
synchronization code into most GoToFlow member functions. But the code
in SlideInitializer::run() is executed only once per opened comic; it is
not slow enough to justify creating a dedicated thread and suffer the
overhead of thread synchronization while the comic is being read.
I have tested several 550 pages long 1 GB comic books.
SlideInitializer::run() took up to 25 milliseconds in the worst case,
but usually 2-4 times less. For smaller 30-page comics it usually takes
less than a millisecond.

Even though mutexGoToFlow was locked in SlideInitializer::run(), there
is no need to lock it in the code moved to GoToFlow::setNumSlides():
this function is called in the main thread like all the other GoToFlow's
member functions that access the flow object. PageLoader does not have
access to the flow object.
2019-05-29 10:56:43 +03:00
Igor Kushnir
12aabf7960 Reader: fix thread safety bugs in PageLoader 2019-05-24 14:53:59 +03:00
Igor Kushnir
c1810b9e54 Library: do not needlessly retrieve all comics from the DB
The siblings variable is unused. So the ComicModel::getAllComics() call
is redundant unless there is some unobvious side effect (I hope not).
2019-05-24 14:53:52 +03:00
Igor Kushnir
92cf54980c Library: eliminate QPainter warnings
There were many run-time warnings in YACReaderLibrary built in Debug
mode with hardware acceleration disabled and with ClassicComicsView
as the active comics view:
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1

The ComicFlowWidgetSW::paintEvent() implementation now corresponds to
ComicFlowWidgetGL::paintEvent(), which has been fixed earlier.

QWidget::repaint() calls paintEvent() immediately.
PictureFlow::paintEvent() calls d->renderer->paint(). So the
d->renderer->paint() call in PictureFlow::updateMarks() was redundant.
2019-05-22 17:37:04 +03:00
Igor Kushnir
8522b11e37 Library: fix a crash at exit when server is disabled
Startup::stop() called from LibraryWindow::closeEvent() crashes if
listener is not initialized.
2019-05-19 13:50:53 +03:00
Felix Kauselmann
caca3191f9 Flow: Remove glu dependency 2019-05-06 07:38:33 +02:00
Felix Kauselmann
d9d93c6481 gl flow: clean up includes 2019-05-05 11:17:45 +02:00
Felix Kauselmann
7bd04ca7d5 remove legacy flow implementation
We no longer support builds using the legacy flow.
2019-05-05 09:39:07 +02:00
Felix Kauselmann
87a6645875 Document version, build flags and patches for bundled pdfium.dll 2019-05-01 16:19:13 +00:00
Felix Kauselmann
c1c413a72d Windows: Update bundled pdfium to r3729 2019-05-01 16:19:13 +00:00
Felix Kauselmann
7ae8afffb1 OS X: Update bundled pdfium to r3729 2019-05-01 16:19:13 +00:00
Luis Ángel San Martín
eeb303a5c1 Avoid parsing non supported dates from comic vine 2019-04-28 09:30:15 +02:00
Luis Ángel San Martín
44db4397e8 Avoid parsing null values from comic vine 2019-04-28 09:28:50 +02:00
Luis Ángel San Martín
54a0610a06 Fix out of bounds crash 2019-04-28 09:28:15 +02:00
Felix Kauselmann
bc6b51ecf5 Add .editorconfig to prevent whitespace conflicts
Some IDE support this out of the box, others will need a plugin.
For more details see https://EditorConfig.org
2019-04-19 15:02:34 +00:00
Luis Ángel San Martín
14f1609ffa
Merge pull request #43 from mytskine/fix-gcc8-warnings-develop
Fix gcc8 warnings
2019-04-19 16:56:56 +02:00
Felix Kauselmann
ad46d9089c Fix botched utf8 encoding. 2019-04-19 14:55:36 +00:00
François Gannaz
88f668d663 bugfix: 'switch case' for OpenVG had no 'break' 2019-04-03 20:44:57 +00:00
François Gannaz
35bb3b553f bug: 'else' without braces but several lines indented (#41)
* bug: 'else' without braces but several lines indented

* always set previousIndex in Render::updateBuffer()

As discussed in #41, the previous index was meant to be
updated in every case, but the faulty indentation
suggested another behavior.
2019-04-03 20:43:27 +00:00
François Gannaz
8c8521a8dc Library: reorder initialization of ResponseParser 2019-04-01 11:25:16 +02:00
François Gannaz
ebcb52bf16 Library: bugfix a 'switch case' that had no 'break' 2019-04-01 11:25:16 +02:00
François Gannaz
0453bf126a Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
9aff260f06 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
6467e2a510 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
3657745f8b Library: reorder initialization of YACReaderHttpSession 2019-04-01 11:25:16 +02:00
François Gannaz
8fa62c3a20 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
7cb57d886a Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
f351e41fa0 Library: add missing 'case' to a 'switch' 2019-04-01 11:25:16 +02:00
François Gannaz
11c99efa30 Library: explicit braces to avoid ambiguous 'else' (hidden in macro) 2019-04-01 11:25:16 +02:00
François Gannaz
62db328ab5 Library: explicit braces to avoid ambiguous 'else' 2019-04-01 11:25:16 +02:00
François Gannaz
20bcd2235a Library: explicit braces to avoid ambiguous 'else' 2019-04-01 11:25:16 +02:00
François Gannaz
6f9d03847a Library: typecast in comparison of int and long u int 2019-04-01 11:25:16 +02:00
François Gannaz
5927b1be45 Library: remove unused variables (shadowed by object attributes) 2019-04-01 11:25:16 +02:00
François Gannaz
6093e003e9 Library: add missing 'default' to non-exhaustive 'switch' 2019-04-01 11:25:16 +02:00
François Gannaz
b77eaf6d9c Library: reorder initialization of FolderModel 2019-04-01 11:25:16 +02:00
François Gannaz
9c3720ceb9 Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
fb97cfa1dc Library: explicit {} on ambiguous 'if if else' 2019-04-01 11:25:16 +02:00
François Gannaz
2189e19a91 Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
3babc0980e Library: remove unused variable 2019-04-01 11:25:16 +02:00
François Gannaz
66941510f0 Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
2274e49ed0 Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
c044e93446 Library: typecast in comparison of int and quint64 2019-04-01 11:25:16 +02:00
François Gannaz
f7b4b7a5d1 Library: add missing 'case' to a 'switch' 2019-04-01 11:25:16 +02:00
François Gannaz
3062d8826e Library: reorder initialization of LibraryWindow 2019-04-01 11:25:16 +02:00
François Gannaz
4ac3407106 type qualifiers are ignored on function return type 2019-04-01 11:25:16 +02:00
François Gannaz
b2f44a939e fix misleading indentation of YACReaderFlowGL::remove 2019-04-01 11:25:16 +02:00
François Gannaz
f87e113f89 fix misleading indentation of YACReaderFlowGL::setCurrentIndex 2019-04-01 11:25:16 +02:00
François Gannaz
472e9f9832 reorder initialization of YACReaderFlowGL 2019-04-01 11:25:16 +02:00
François Gannaz
9ace47ccc0 explicit parenthesis in complex comparison 2019-04-01 11:23:33 +02:00