aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2025-08-31 13:50:05 +0200
committerRodrigo Arias Mallo <rodarima@gmail.com>2025-08-31 14:09:10 +0200
commit1d55cf26a355b89a007e4a9bf7361d8a5c2c64cd (patch)
treec1851d29b96d05d435a31ca8af108eb21a87b350
parent47ab7c704f415454fb3c908f9fe0bdebb3239ef3 (diff)
Fix hr width exceeding available space
The hr ruler was directly using the available content width to compute its allocation. However, the width needs to take into account the border of the hr element (1 pixel on each side) to avoid making the element larger than the available space. Co-authored-by: dogma
-rw-r--r--dw/ruler.cc6
-rw-r--r--test/html/Makefile.am1
-rw-r--r--test/html/render/hr.html10
-rw-r--r--test/html/render/hr.ref.html24
4 files changed, 40 insertions, 1 deletions
diff --git a/dw/ruler.cc b/dw/ruler.cc
index fc0bbce6..5e922723 100644
--- a/dw/ruler.cc
+++ b/dw/ruler.cc
@@ -2,6 +2,7 @@
* Dillo Widget
*
* Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org>
+ * Copyright 2025 Rodrigo Arias Mallo <rodarima@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -41,7 +42,10 @@ Ruler::~Ruler ()
void Ruler::sizeRequestSimpl (core::Requisition *requisition)
{
- requisition->width = lout::misc::max (getAvailWidth (true), boxDiffWidth ());
+ /* The ruler will be drawn by using a 1px border, so we substract the
+ * border from the available width when computing the content width. */
+ int w = lout::misc::max(0, getAvailWidth(true) - boxDiffWidth());
+ requisition->width = w;
requisition->ascent = boxOffsetY ();
requisition->descent = boxRestHeight ();
}
diff --git a/test/html/Makefile.am b/test/html/Makefile.am
index fc959b1f..60455ac5 100644
--- a/test/html/Makefile.am
+++ b/test/html/Makefile.am
@@ -18,6 +18,7 @@ TESTS = \
render/form-display-none.html \
render/github-infinite-loop.html \
render/hackernews.html \
+ render/hr.html \
render/img-aspect-ratio-absolute.html \
render/img-aspect-ratio-div.html \
render/img-aspect-ratio-mix-border.html \
diff --git a/test/html/render/hr.html b/test/html/render/hr.html
new file mode 100644
index 00000000..e76dde7a
--- /dev/null
+++ b/test/html/render/hr.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Test hr length</title>
+ </head>
+ <body>
+ <hr>
+ <hr style="border-width: 10px">
+ </body>
+</html>
diff --git a/test/html/render/hr.ref.html b/test/html/render/hr.ref.html
new file mode 100644
index 00000000..21064d9f
--- /dev/null
+++ b/test/html/render/hr.ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Test hr length</title>
+ </head>
+<style>
+div {
+ border: 1px inset;
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+</style>
+ <body>
+ <!--
+ Default canvas width is 780, with 5 pixels of margin for body on each
+ side, so we have 770 pixels of space available before the scrollbar is
+ shown. The ruler needs one pixel on each side by default, so 768 px is the
+ available width.
+ -->
+ <div style="width: 768px"></div>
+ <!-- Same but with 20 pixels for the ruler border -->
+ <div style="width: 750px; border-width: 10px"></div>
+ </body>
+</html>