From 0ea6c4a70e324c431bb4c10eab2f2de25da253e0 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 11 Jul 2016 15:33:54 +0200
Subject: Change chat view layout to use tables for performance

This changes the CSS to change the chat view elements to
table elements like <table>, <tr> and <td>.

The previously used color block with the CSS attribute
"position: fixed" had a very noticeable performance overhead
when scrolling the view.

Table layout has a noticeably smaller performance overhead
when scrolling the chat view.

Test-Information:

Verified the chat view layout pretty much looks like the
one we had before. Tested with Qt 5.5.1 on OS X 10.11.5.

Change-Id: If950f2a45ea4f02b68cdcd81deff965147540c7e

diff --git a/Swift/resources/themes/Default/Template.html b/Swift/resources/themes/Default/Template.html
index fe2f599..74c5e46 100644
--- a/Swift/resources/themes/Default/Template.html
+++ b/Swift/resources/themes/Default/Template.html
@@ -10,9 +10,10 @@
   </head>
   <body>
     <div class="container">
-      <div class="colour-block"></div>
       <div class="message-block">
-        <div id="insert"></div>
+        <div id="insert">
+        <div class="user"></div><div class="text"></div>
+        </div>
       </div>
     </div>
   </body>
diff --git a/Swift/resources/themes/Default/Unread.html b/Swift/resources/themes/Default/Unread.html
index f11162a..3e25431 100644
--- a/Swift/resources/themes/Default/Unread.html
+++ b/Swift/resources/themes/Default/Unread.html
@@ -1 +1 @@
-<div class='unread'><span class="swift_resizable"><p>Unread</p></span></div>
+<div class='unread'><div class="user"></div><div class="text"><span class="swift_resizable"><p>Unread</p></span></div></div>
\ No newline at end of file
diff --git a/Swift/resources/themes/Default/main.css b/Swift/resources/themes/Default/main.css
index 529f6f5..4389575 100644
--- a/Swift/resources/themes/Default/main.css
+++ b/Swift/resources/themes/Default/main.css
@@ -7,6 +7,13 @@ body {
     padding: 0;
 }
 
+/* This turns the insert marker element into a vertical fill.
+ * This way the colored side bar is expanded to the full height of the view. */
+#insert {
+    display: table-row;
+    height: 100%;
+}
+
 .container {
     height: 100%;
     width:  100%;
@@ -15,29 +22,19 @@ body {
     /*margin-left: 20%; /* REMOVE THIS LINE. FOR DISPLAY PURPOSE ONLY. */
     /*margin-top: 75px; /* REMOVE THIS LINE. FOR DISPLAY PURPOSE ONLY. */
     position: absolute;
+  display: table;
 }
-
-/* Left side colour block*/
-
-.colour-block {
-    /* This is needed so the grey sidebar stays fixed relative to the view and not the page when scrolling. */
-    /* This also seems to have noticible negative performance side-effects when scrolling. */
-    position: fixed;
-    height: 100%;
-    width: 175px;
-    background-color: #595959;
-}
-
 /* Holds all user and message content */
 
 .message-block {
+    display: table;
+    border: 0px solid black;
+    border-spacing: 0;
     height: 100%;
     width: 100%;
-    position: absolute;
     z-index: 10;
     top: 0;
     left: 0;
-    margin-bottom: 10px;
     overflow-wrap: break-word; /* Allow breaking of long words (e.g. URLs) to prevent overflow. */
     /*margin-top: -2px; /* REMOVE THIS LINE. FOR DISPLAY PURPOSE ONLY. */
 }
@@ -45,8 +42,11 @@ body {
 /* Individual message */
 
 .message {
+    display: table-row;
+    border: inherit;
     width: 100%;
     margin-top: 10px;
+    border-top: 0.2em solid transparent;
 }
 
 .additional {
@@ -55,7 +55,9 @@ body {
 
 .unread {
     height: 30px;
-    border-top: solid 1px #ffd180;
+    display: table-row;
+    border: inherit;
+    /*width: 100%;*/
     margin-top: -6px;
     margin-bottom: -15px;
     margin-left: 190px;
@@ -68,7 +70,9 @@ body {
     font-size: 75%;
     text-transform: uppercase;
     color: #ffd180;
-    /* color: #ffd180; */
+    border-top: solid 1px #ffd180;
+    margin-left: 20px;
+    margin-right: 20px;;
 }
 
 /* Left column content */
@@ -78,10 +82,14 @@ body {
 }
 
 .user {
-    width: 175px;
+    display: table-cell;
+    border: inherit;
     text-align: center;
-    float: left;
     margin-top: 2px;
+    width: 175px;
+    max-width: 175px;
+    min-width: 175px;
+    background-color: #595959;
 }
 
 .time {
@@ -197,40 +205,52 @@ body {
 }
 
 /* Right column content */
+.message:not(.additional) {
+    border-top: 1.2em solid transparent; /* Workaround for table rows not having a padding. */
+}
 
 .message:not(.additional) .text {
     min-height: 32px;
 }
 
 .text {
+    display: table-cell;
+    border: inherit;
     margin-left: 175px;
     font-size: 14px;
     color: #595959;
+    vertical-align: top;
+}
+
+.text a {
+    word-break: break-all; /* Break long URLs at any point. */
 }
 
 .myusername {
     color: #92c47e;
     margin-left: 20px;
     font-weight: 700;
+    margin-top: 0px;
+    margin-bottom: 0.2em;
 }
 
 .otherusername {
     color: #6eb6ce;
     margin-left: 20px;
     font-weight: 700;
+    margin-top: 0px;
 }
 
 .message-content {
     margin-left: 20px;
-    margin-top: -11px;
     margin-right: 20px;
-    margin-bottom: 18px;
 }
 
 .system-message {
     margin-left: 20px;
     margin-right: 20px;
-    margin-bottom: 18px;
+    margin-top: 0px;
+    margin-bottom: 0px;
     color: #aaa;
     font-style: italic;
 }
-- 
cgit v0.10.2-6-g49f6