Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: Source/core/rendering/RenderObject.cpp

Issue 591613003: Move painting code from RenderObject into a new ObjectPainter class. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Merge again. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/RenderTableCell.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 23 matching lines...) Expand all
34 #include "core/dom/StyleEngine.h" 34 #include "core/dom/StyleEngine.h"
35 #include "core/dom/shadow/ShadowRoot.h" 35 #include "core/dom/shadow/ShadowRoot.h"
36 #include "core/editing/EditingBoundary.h" 36 #include "core/editing/EditingBoundary.h"
37 #include "core/editing/FrameSelection.h" 37 #include "core/editing/FrameSelection.h"
38 #include "core/editing/htmlediting.h" 38 #include "core/editing/htmlediting.h"
39 #include "core/fetch/ResourceLoadPriorityOptimizer.h" 39 #include "core/fetch/ResourceLoadPriorityOptimizer.h"
40 #include "core/fetch/ResourceLoader.h" 40 #include "core/fetch/ResourceLoader.h"
41 #include "core/frame/EventHandlerRegistry.h" 41 #include "core/frame/EventHandlerRegistry.h"
42 #include "core/frame/FrameView.h" 42 #include "core/frame/FrameView.h"
43 #include "core/frame/LocalFrame.h" 43 #include "core/frame/LocalFrame.h"
44 #include "core/frame/Settings.h"
45 #include "core/frame/UseCounter.h"
44 #include "core/html/HTMLAnchorElement.h" 46 #include "core/html/HTMLAnchorElement.h"
45 #include "core/html/HTMLElement.h" 47 #include "core/html/HTMLElement.h"
46 #include "core/html/HTMLHtmlElement.h" 48 #include "core/html/HTMLHtmlElement.h"
47 #include "core/html/HTMLTableCellElement.h" 49 #include "core/html/HTMLTableCellElement.h"
48 #include "core/html/HTMLTableElement.h" 50 #include "core/html/HTMLTableElement.h"
49 #include "core/page/AutoscrollController.h" 51 #include "core/page/AutoscrollController.h"
50 #include "core/page/EventHandler.h" 52 #include "core/page/EventHandler.h"
51 #include "core/page/Page.h" 53 #include "core/page/Page.h"
52 #include "core/frame/Settings.h" 54 #include "core/paint/ObjectPainter.h"
53 #include "core/frame/UseCounter.h"
54 #include "core/rendering/FlowThreadController.h" 55 #include "core/rendering/FlowThreadController.h"
55 #include "core/rendering/HitTestResult.h" 56 #include "core/rendering/HitTestResult.h"
56 #include "core/rendering/RenderCounter.h" 57 #include "core/rendering/RenderCounter.h"
57 #include "core/rendering/RenderDeprecatedFlexibleBox.h" 58 #include "core/rendering/RenderDeprecatedFlexibleBox.h"
58 #include "core/rendering/RenderFlexibleBox.h" 59 #include "core/rendering/RenderFlexibleBox.h"
59 #include "core/rendering/RenderFlowThread.h" 60 #include "core/rendering/RenderFlowThread.h"
60 #include "core/rendering/RenderGeometryMap.h" 61 #include "core/rendering/RenderGeometryMap.h"
61 #include "core/rendering/RenderGrid.h" 62 #include "core/rendering/RenderGrid.h"
62 #include "core/rendering/RenderImage.h" 63 #include "core/rendering/RenderImage.h"
63 #include "core/rendering/RenderImageResourceStyleImage.h" 64 #include "core/rendering/RenderImageResourceStyleImage.h"
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 if (mustInvalidateFillLayersPaintOnHeightChange(style()->backgroundLayers()) ) 971 if (mustInvalidateFillLayersPaintOnHeightChange(style()->backgroundLayers()) )
971 return true; 972 return true;
972 973
973 // Our fill layers are ok. Let's check border. 974 // Our fill layers are ok. Let's check border.
974 if (style()->hasBorder() && canRenderBorderImage()) 975 if (style()->hasBorder() && canRenderBorderImage())
975 return true; 976 return true;
976 977
977 return false; 978 return false;
978 } 979 }
979 980
980 void RenderObject::drawLineForBoxSide(GraphicsContext* graphicsContext, int x1, int y1, int x2, int y2,
981 BoxSide side, Color color, EBorderStyle st yle,
982 int adjacentWidth1, int adjacentWidth2, bo ol antialias)
983 {
984 int thickness;
985 int length;
986 if (side == BSTop || side == BSBottom) {
987 thickness = y2 - y1;
988 length = x2 - x1;
989 } else {
990 thickness = x2 - x1;
991 length = y2 - y1;
992 }
993
994 // FIXME: We really would like this check to be an ASSERT as we don't want t o draw empty borders. However
995 // nothing guarantees that the following recursive calls to drawLineForBoxSi de will have non-null dimensions.
996 if (!thickness || !length)
997 return;
998
999 if (style == DOUBLE && thickness < 3)
1000 style = SOLID;
1001
1002 switch (style) {
1003 case BNONE:
1004 case BHIDDEN:
1005 return;
1006 case DOTTED:
1007 case DASHED:
1008 drawDashedOrDottedBoxSide(graphicsContext, x1, y1, x2, y2, side,
1009 color, thickness, style, antialias);
1010 break;
1011 case DOUBLE:
1012 drawDoubleBoxSide(graphicsContext, x1, y1, x2, y2, length, side, color,
1013 thickness, adjacentWidth1, adjacentWidth2, antialias);
1014 break;
1015 case RIDGE:
1016 case GROOVE:
1017 drawRidgeOrGrooveBoxSide(graphicsContext, x1, y1, x2, y2, side, color,
1018 style, adjacentWidth1, adjacentWidth2, antialias);
1019 break;
1020 case INSET:
1021 // FIXME: Maybe we should lighten the colors on one side like Firefox.
1022 // https://bugs.webkit.org/show_bug.cgi?id=58608
1023 if (side == BSTop || side == BSLeft)
1024 color = color.dark();
1025 // fall through
1026 case OUTSET:
1027 if (style == OUTSET && (side == BSBottom || side == BSRight))
1028 color = color.dark();
1029 // fall through
1030 case SOLID:
1031 drawSolidBoxSide(graphicsContext, x1, y1, x2, y2, side, color, adjacentW idth1, adjacentWidth2, antialias);
1032 break;
1033 }
1034 }
1035
1036 void RenderObject::drawDashedOrDottedBoxSide(GraphicsContext* graphicsContext, i nt x1, int y1, int x2, int y2,
1037 BoxSide side, Color color, int thickness, EBorderStyle style, bool antialias )
1038 {
1039 if (thickness <= 0)
1040 return;
1041
1042 bool wasAntialiased = graphicsContext->shouldAntialias();
1043 StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
1044 graphicsContext->setShouldAntialias(antialias);
1045 graphicsContext->setStrokeColor(color);
1046 graphicsContext->setStrokeThickness(thickness);
1047 graphicsContext->setStrokeStyle(style == DASHED ? DashedStroke : DottedStrok e);
1048
1049 switch (side) {
1050 case BSBottom:
1051 case BSTop:
1052 graphicsContext->drawLine(IntPoint(x1, (y1 + y2) / 2), IntPoint(x2, (y1 + y2) / 2));
1053 break;
1054 case BSRight:
1055 case BSLeft:
1056 graphicsContext->drawLine(IntPoint((x1 + x2) / 2, y1), IntPoint((x1 + x2 ) / 2, y2));
1057 break;
1058 }
1059 graphicsContext->setShouldAntialias(wasAntialiased);
1060 graphicsContext->setStrokeStyle(oldStrokeStyle);
1061 }
1062
1063 void RenderObject::drawDoubleBoxSide(GraphicsContext* graphicsContext, int x1, i nt y1, int x2, int y2,
1064 int length, BoxSide side, Color color, int thickness, int adjacentWidth1, in t adjacentWidth2, bool antialias)
1065 {
1066 int thirdOfThickness = (thickness + 1) / 3;
1067 ASSERT(thirdOfThickness);
1068
1069 if (!adjacentWidth1 && !adjacentWidth2) {
1070 StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
1071 graphicsContext->setStrokeStyle(NoStroke);
1072 graphicsContext->setFillColor(color);
1073
1074 bool wasAntialiased = graphicsContext->shouldAntialias();
1075 graphicsContext->setShouldAntialias(antialias);
1076
1077 switch (side) {
1078 case BSTop:
1079 case BSBottom:
1080 graphicsContext->drawRect(IntRect(x1, y1, length, thirdOfThickness)) ;
1081 graphicsContext->drawRect(IntRect(x1, y2 - thirdOfThickness, length, thirdOfThickness));
1082 break;
1083 case BSLeft:
1084 case BSRight:
1085 // FIXME: Why do we offset the border by 1 in this case but not the other one?
1086 if (length > 1) {
1087 graphicsContext->drawRect(IntRect(x1, y1 + 1, thirdOfThickness, length - 1));
1088 graphicsContext->drawRect(IntRect(x2 - thirdOfThickness, y1 + 1, thirdOfThickness, length - 1));
1089 }
1090 break;
1091 }
1092
1093 graphicsContext->setShouldAntialias(wasAntialiased);
1094 graphicsContext->setStrokeStyle(oldStrokeStyle);
1095 return;
1096 }
1097
1098 int adjacent1BigThird = ((adjacentWidth1 > 0) ? adjacentWidth1 + 1 : adjacen tWidth1 - 1) / 3;
1099 int adjacent2BigThird = ((adjacentWidth2 > 0) ? adjacentWidth2 + 1 : adjacen tWidth2 - 1) / 3;
1100
1101 switch (side) {
1102 case BSTop:
1103 drawLineForBoxSide(graphicsContext, x1 + std::max((-adjacentWidth1 * 2 + 1) / 3, 0),
1104 y1, x2 - std::max((-adjacentWidth2 * 2 + 1) / 3, 0), y1 + thirdOfThi ckness,
1105 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1106 drawLineForBoxSide(graphicsContext, x1 + std::max((adjacentWidth1 * 2 + 1) / 3, 0),
1107 y2 - thirdOfThickness, x2 - std::max((adjacentWidth2 * 2 + 1) / 3, 0 ), y2,
1108 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1109 break;
1110 case BSLeft:
1111 drawLineForBoxSide(graphicsContext, x1, y1 + std::max((-adjacentWidth1 * 2 + 1) / 3, 0),
1112 x1 + thirdOfThickness, y2 - std::max((-adjacentWidth2 * 2 + 1) / 3, 0),
1113 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1114 drawLineForBoxSide(graphicsContext, x2 - thirdOfThickness, y1 + std::max ((adjacentWidth1 * 2 + 1) / 3, 0),
1115 x2, y2 - std::max((adjacentWidth2 * 2 + 1) / 3, 0),
1116 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1117 break;
1118 case BSBottom:
1119 drawLineForBoxSide(graphicsContext, x1 + std::max((adjacentWidth1 * 2 + 1) / 3, 0),
1120 y1, x2 - std::max((adjacentWidth2 * 2 + 1) / 3, 0), y1 + thirdOfThic kness,
1121 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1122 drawLineForBoxSide(graphicsContext, x1 + std::max((-adjacentWidth1 * 2 + 1) / 3, 0),
1123 y2 - thirdOfThickness, x2 - std::max((-adjacentWidth2 * 2 + 1) / 3, 0), y2,
1124 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1125 break;
1126 case BSRight:
1127 drawLineForBoxSide(graphicsContext, x1, y1 + std::max((adjacentWidth1 * 2 + 1) / 3, 0),
1128 x1 + thirdOfThickness, y2 - std::max((adjacentWidth2 * 2 + 1) / 3, 0 ),
1129 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1130 drawLineForBoxSide(graphicsContext, x2 - thirdOfThickness, y1 + std::max ((-adjacentWidth1 * 2 + 1) / 3, 0),
1131 x2, y2 - std::max((-adjacentWidth2 * 2 + 1) / 3, 0),
1132 side, color, SOLID, adjacent1BigThird, adjacent2BigThird, antialias) ;
1133 break;
1134 default:
1135 break;
1136 }
1137 }
1138
1139 void RenderObject::drawRidgeOrGrooveBoxSide(GraphicsContext* graphicsContext, in t x1, int y1, int x2, int y2,
1140 BoxSide side, Color color, EBorderStyle style, int adjacentWidth1, int adjac entWidth2, bool antialias)
1141 {
1142 EBorderStyle s1;
1143 EBorderStyle s2;
1144 if (style == GROOVE) {
1145 s1 = INSET;
1146 s2 = OUTSET;
1147 } else {
1148 s1 = OUTSET;
1149 s2 = INSET;
1150 }
1151
1152 int adjacent1BigHalf = ((adjacentWidth1 > 0) ? adjacentWidth1 + 1 : adjacent Width1 - 1) / 2;
1153 int adjacent2BigHalf = ((adjacentWidth2 > 0) ? adjacentWidth2 + 1 : adjacent Width2 - 1) / 2;
1154
1155 switch (side) {
1156 case BSTop:
1157 drawLineForBoxSide(graphicsContext, x1 + std::max(-adjacentWidth1, 0) / 2, y1, x2 - std::max(-adjacentWidth2, 0) / 2, (y1 + y2 + 1) / 2,
1158 side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
1159 drawLineForBoxSide(graphicsContext, x1 + std::max(adjacentWidth1 + 1, 0) / 2, (y1 + y2 + 1) / 2, x2 - std::max(adjacentWidth2 + 1, 0) / 2, y2,
1160 side, color, s2, adjacentWidth1 / 2, adjacentWidth2 / 2, antialias);
1161 break;
1162 case BSLeft:
1163 drawLineForBoxSide(graphicsContext, x1, y1 + std::max(-adjacentWidth1, 0 ) / 2, (x1 + x2 + 1) / 2, y2 - std::max(-adjacentWidth2, 0) / 2,
1164 side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
1165 drawLineForBoxSide(graphicsContext, (x1 + x2 + 1) / 2, y1 + std::max(adj acentWidth1 + 1, 0) / 2, x2, y2 - std::max(adjacentWidth2 + 1, 0) / 2,
1166 side, color, s2, adjacentWidth1 / 2, adjacentWidth2 / 2, antialias);
1167 break;
1168 case BSBottom:
1169 drawLineForBoxSide(graphicsContext, x1 + std::max(adjacentWidth1, 0) / 2 , y1, x2 - std::max(adjacentWidth2, 0) / 2, (y1 + y2 + 1) / 2,
1170 side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
1171 drawLineForBoxSide(graphicsContext, x1 + std::max(-adjacentWidth1 + 1, 0 ) / 2, (y1 + y2 + 1) / 2, x2 - std::max(-adjacentWidth2 + 1, 0) / 2, y2,
1172 side, color, s1, adjacentWidth1 / 2, adjacentWidth2 / 2, antialias);
1173 break;
1174 case BSRight:
1175 drawLineForBoxSide(graphicsContext, x1, y1 + std::max(adjacentWidth1, 0) / 2, (x1 + x2 + 1) / 2, y2 - std::max(adjacentWidth2, 0) / 2,
1176 side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
1177 drawLineForBoxSide(graphicsContext, (x1 + x2 + 1) / 2, y1 + std::max(-ad jacentWidth1 + 1, 0) / 2, x2, y2 - std::max(-adjacentWidth2 + 1, 0) / 2,
1178 side, color, s1, adjacentWidth1 / 2, adjacentWidth2 / 2, antialias);
1179 break;
1180 }
1181 }
1182
1183 void RenderObject::drawSolidBoxSide(GraphicsContext* graphicsContext, int x1, in t y1, int x2, int y2,
1184 BoxSide side, Color color, int adjacentWidth1, int adjacentWidth2, bool anti alias)
1185 {
1186 StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
1187 graphicsContext->setStrokeStyle(NoStroke);
1188 graphicsContext->setFillColor(color);
1189 ASSERT(x2 >= x1);
1190 ASSERT(y2 >= y1);
1191 if (!adjacentWidth1 && !adjacentWidth2) {
1192 // Turn off antialiasing to match the behavior of drawConvexPolygon();
1193 // this matters for rects in transformed contexts.
1194 bool wasAntialiased = graphicsContext->shouldAntialias();
1195 graphicsContext->setShouldAntialias(antialias);
1196 graphicsContext->drawRect(IntRect(x1, y1, x2 - x1, y2 - y1));
1197 graphicsContext->setShouldAntialias(wasAntialiased);
1198 graphicsContext->setStrokeStyle(oldStrokeStyle);
1199 return;
1200 }
1201 FloatPoint quad[4];
1202 switch (side) {
1203 case BSTop:
1204 quad[0] = FloatPoint(x1 + std::max(-adjacentWidth1, 0), y1);
1205 quad[1] = FloatPoint(x1 + std::max(adjacentWidth1, 0), y2);
1206 quad[2] = FloatPoint(x2 - std::max(adjacentWidth2, 0), y2);
1207 quad[3] = FloatPoint(x2 - std::max(-adjacentWidth2, 0), y1);
1208 break;
1209 case BSBottom:
1210 quad[0] = FloatPoint(x1 + std::max(adjacentWidth1, 0), y1);
1211 quad[1] = FloatPoint(x1 + std::max(-adjacentWidth1, 0), y2);
1212 quad[2] = FloatPoint(x2 - std::max(-adjacentWidth2, 0), y2);
1213 quad[3] = FloatPoint(x2 - std::max(adjacentWidth2, 0), y1);
1214 break;
1215 case BSLeft:
1216 quad[0] = FloatPoint(x1, y1 + std::max(-adjacentWidth1, 0));
1217 quad[1] = FloatPoint(x1, y2 - std::max(-adjacentWidth2, 0));
1218 quad[2] = FloatPoint(x2, y2 - std::max(adjacentWidth2, 0));
1219 quad[3] = FloatPoint(x2, y1 + std::max(adjacentWidth1, 0));
1220 break;
1221 case BSRight:
1222 quad[0] = FloatPoint(x1, y1 + std::max(adjacentWidth1, 0));
1223 quad[1] = FloatPoint(x1, y2 - std::max(adjacentWidth2, 0));
1224 quad[2] = FloatPoint(x2, y2 - std::max(-adjacentWidth2, 0));
1225 quad[3] = FloatPoint(x2, y1 + std::max(-adjacentWidth1, 0));
1226 break;
1227 }
1228
1229 graphicsContext->drawConvexPolygon(4, quad, antialias);
1230 graphicsContext->setStrokeStyle(oldStrokeStyle);
1231 }
1232
1233 void RenderObject::paintFocusRing(PaintInfo& paintInfo, const LayoutPoint& paint Offset, RenderStyle* style)
1234 {
1235 Vector<LayoutRect> focusRingRects;
1236 addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer());
1237 ASSERT(style->outlineStyleIsAuto());
1238 Vector<IntRect> focusRingIntRects;
1239 for (size_t i = 0; i < focusRingRects.size(); ++i)
1240 focusRingIntRects.append(pixelSnappedIntRect(focusRingRects[i]));
1241 paintInfo.context->drawFocusRing(focusRingIntRects, style->outlineWidth(), s tyle->outlineOffset(), resolveColor(style, CSSPropertyOutlineColor));
1242 }
1243
1244 void RenderObject::paintOutline(PaintInfo& paintInfo, const LayoutRect& paintRec t) 981 void RenderObject::paintOutline(PaintInfo& paintInfo, const LayoutRect& paintRec t)
1245 { 982 {
1246 RenderStyle* styleToUse = style(); 983 ObjectPainter(*this).paintOutline(paintInfo, paintRect);
1247 if (!styleToUse->hasOutline())
1248 return;
1249
1250 LayoutUnit outlineWidth = styleToUse->outlineWidth();
1251
1252 int outlineOffset = styleToUse->outlineOffset();
1253
1254 if (styleToUse->outlineStyleIsAuto()) {
1255 if (RenderTheme::theme().shouldDrawDefaultFocusRing(this)) {
1256 // Only paint the focus ring by hand if the theme isn't able to draw the focus ring.
1257 paintFocusRing(paintInfo, paintRect.location(), styleToUse);
1258 }
1259 return;
1260 }
1261
1262 if (styleToUse->outlineStyle() == BNONE)
1263 return;
1264
1265 IntRect inner = pixelSnappedIntRect(paintRect);
1266 inner.inflate(outlineOffset);
1267
1268 IntRect outer = pixelSnappedIntRect(inner);
1269 outer.inflate(outlineWidth);
1270
1271 // FIXME: This prevents outlines from painting inside the object. See bug 12 042
1272 if (outer.isEmpty())
1273 return;
1274
1275 EBorderStyle outlineStyle = styleToUse->outlineStyle();
1276 Color outlineColor = resolveColor(styleToUse, CSSPropertyOutlineColor);
1277
1278 GraphicsContext* graphicsContext = paintInfo.context;
1279 bool useTransparencyLayer = outlineColor.hasAlpha();
1280 if (useTransparencyLayer) {
1281 if (outlineStyle == SOLID) {
1282 Path path;
1283 path.addRect(outer);
1284 path.addRect(inner);
1285 graphicsContext->setFillRule(RULE_EVENODD);
1286 graphicsContext->setFillColor(outlineColor);
1287 graphicsContext->fillPath(path);
1288 return;
1289 }
1290 graphicsContext->beginTransparencyLayer(static_cast<float>(outlineColor. alpha()) / 255);
1291 outlineColor = Color(outlineColor.red(), outlineColor.green(), outlineCo lor.blue());
1292 }
1293
1294 int leftOuter = outer.x();
1295 int leftInner = inner.x();
1296 int rightOuter = outer.maxX();
1297 int rightInner = inner.maxX();
1298 int topOuter = outer.y();
1299 int topInner = inner.y();
1300 int bottomOuter = outer.maxY();
1301 int bottomInner = inner.maxY();
1302
1303 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, leftInner, bottomOu ter, BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth);
1304 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, rightOuter, topInne r, BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth);
1305 drawLineForBoxSide(graphicsContext, rightInner, topOuter, rightOuter, bottom Outer, BSRight, outlineColor, outlineStyle, outlineWidth, outlineWidth);
1306 drawLineForBoxSide(graphicsContext, leftOuter, bottomInner, rightOuter, bott omOuter, BSBottom, outlineColor, outlineStyle, outlineWidth, outlineWidth);
1307
1308 if (useTransparencyLayer)
1309 graphicsContext->endLayer();
1310 } 984 }
1311 985
1312 void RenderObject::addChildFocusRingRects(Vector<LayoutRect>& rects, const Layou tPoint& additionalOffset, const RenderLayerModelObject* paintContainer) const 986 void RenderObject::addChildFocusRingRects(Vector<LayoutRect>& rects, const Layou tPoint& additionalOffset, const RenderLayerModelObject* paintContainer) const
1313 { 987 {
1314 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling()) { 988 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling()) {
1315 if (current->isText() || current->isListMarker()) 989 if (current->isText() || current->isListMarker())
1316 continue; 990 continue;
1317 991
1318 if (current->isBox()) { 992 if (current->isBox()) {
1319 RenderBox* box = toRenderBox(current); 993 RenderBox* box = toRenderBox(current);
(...skipping 2171 matching lines...) Expand 10 before | Expand all | Expand 10 after
3491 { 3165 {
3492 if (object1) { 3166 if (object1) {
3493 const blink::RenderObject* root = object1; 3167 const blink::RenderObject* root = object1;
3494 while (root->parent()) 3168 while (root->parent())
3495 root = root->parent(); 3169 root = root->parent();
3496 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); 3170 root->showRenderTreeAndMark(object1, "*", object2, "-", 0);
3497 } 3171 }
3498 } 3172 }
3499 3173
3500 #endif 3174 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/RenderTableCell.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698