2 * \file GuiSetBorder.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * \author Jürgen Spitzmüller
10 * Full author contact details are available in file CREDITS.
15 #include "GuiSetBorder.h"
17 #include "support/debug.h"
20 #include <QMouseEvent>
21 #include <QPaintEvent>
24 GuiSetBorder::GuiSetBorder(QWidget * parent, Qt::WindowFlags fl)
25 : QWidget(parent, fl), buffer(75, 75), bottom_drawn_wide_(false),
26 top_drawn_wide_(false)
28 /* length of corner line */
29 corner_length = buffer.width() / 10;
31 margin = buffer.height() / 10;
33 bwidth = buffer.width();
34 bheight = buffer.height();
38 setMinimumSize(bwidth, bheight);
39 setMaximumSize(bwidth, bheight);
43 void GuiSetBorder::paintEvent(QPaintEvent * e)
45 QWidget::paintEvent(e);
46 QPainter painter(this);
47 painter.drawPixmap(0, 0, buffer);
51 void GuiSetBorder::init()
54 QPainter paint(&buffer);
56 paint.setPen(Qt::black);
58 // Draw the corner marks
59 paint.drawLine(margin + corner_length, margin,
60 margin + corner_length, margin + corner_length);
61 paint.drawLine(bwidth - (margin + corner_length), margin,
62 bwidth - (margin + corner_length), margin + corner_length);
64 paint.drawLine(margin, margin + corner_length,
65 margin + corner_length, margin + corner_length);
66 paint.drawLine(margin, bheight - (margin + corner_length),
67 margin + corner_length, bheight - (margin + corner_length));
69 paint.drawLine(margin + corner_length ,bheight - margin,
70 margin + corner_length ,bheight - (margin + corner_length));
71 paint.drawLine(bwidth - (margin + corner_length), bheight - margin,
72 bwidth - (margin + corner_length), bheight - (margin + corner_length));
74 paint.drawLine(bheight - margin, margin+corner_length,
75 bheight - (margin + corner_length), margin + corner_length);
76 paint.drawLine(bheight - margin, bheight - (margin + corner_length),
77 bheight - (margin + corner_length),bheight - (margin + corner_length));
81 void GuiSetBorder::mousePressEvent(QMouseEvent * e)
83 if (e->y() > e->x()) {
84 if (e->y() < height() - e->x()) {
86 setLeft(left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
91 if (bottom_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
92 setBottomLeftTrim(bottom_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
95 } else if (bottom_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
96 setBottomRightTrim(bottom_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
99 } else if (bottom_.enabled) {
100 setBottom(bottom_.set == LINE_SET ? LINE_UNSET : LINE_SET);
106 if (e->y() < height() - e->x()) {
107 if (top_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
108 setTopLeftTrim(top_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
111 } else if (top_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
112 setTopRightTrim(top_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
115 } else if (top_.enabled) {
116 setTop(top_.set == LINE_SET ? LINE_UNSET : LINE_SET);
121 if (right_.enabled) {
122 setRight(right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
134 void GuiSetBorder::drawLine(QColor const & col, int x, int y, int x2, int y2)
136 QPainter paint(&buffer);
137 QPen p = paint.pen();
141 paint.drawLine(x, y, x2, y2);
145 void GuiSetBorder::drawLeft(BorderState draw)
161 col = QColor(Qt::lightGray);
162 drawLine(col, margin + corner_length, margin + corner_length + 2,
163 margin + corner_length, bheight - margin - corner_length - 1);
167 void GuiSetBorder::drawRight(BorderState draw)
183 col = QColor(Qt::lightGray);
184 drawLine(col, bheight - margin - corner_length + 1, margin + corner_length + 2,
185 bheight - margin - corner_length + 1, bheight - margin - corner_length - 1);
189 void GuiSetBorder::drawTop(BorderState draw)
195 top_drawn_wide_ = true;
199 top_drawn_wide_ = false;
204 top_drawn_wide_ = true;
208 col = QColor(Qt::lightGray);
209 int const lt = (top_trim_left_.enabled) ? corner_length + 4 : 0;
210 int const rt = (top_trim_right_.enabled) ? corner_length + 4 : 0;
211 drawLine(col, margin + corner_length + 2 + lt, margin + corner_length,
212 bwidth - margin - corner_length - 1 - rt, margin + corner_length);
216 void GuiSetBorder::undrawWideTopLine()
218 if (!top_drawn_wide_)
221 // Overpaint previous lines white
222 drawLine(Qt::white, margin + corner_length + 2, margin + corner_length,
223 bwidth - margin - corner_length - 1, margin + corner_length);
224 top_drawn_wide_ = false;
228 void GuiSetBorder::drawTopLeftTrim(BorderState draw)
243 if (!top_trim_left_.enabled)
244 col = QColor(Qt::white);
245 int const lt = corner_length;
246 if (top_trim_left_.enabled)
247 drawLine(col, margin + corner_length + 2, margin + corner_length,
248 margin + corner_length + 2 + lt, margin + corner_length);
252 void GuiSetBorder::drawTopRightTrim(BorderState draw)
267 if (!top_trim_right_.enabled)
268 col = QColor(Qt::white);
269 int const rt = corner_length;
270 if (top_trim_right_.enabled)
271 drawLine(col, bwidth - margin - corner_length - 1 - rt, margin + corner_length,
272 bwidth - margin - corner_length - 1, margin + corner_length);
276 void GuiSetBorder::drawBottom(BorderState draw)
282 bottom_drawn_wide_ = true;
286 bottom_drawn_wide_ = false;
291 bottom_drawn_wide_ = true;
294 if (!bottom_.enabled)
295 col = QColor(Qt::lightGray);
296 int const lt = (bottom_trim_left_.enabled) ? corner_length + 4 : 0;
297 int const rt = (bottom_trim_right_.enabled) ? corner_length + 4 : 0;
298 drawLine(col, margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1,
299 bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1);
303 void GuiSetBorder::undrawWideBottomLine()
305 if (!bottom_drawn_wide_)
308 //Overpaint previous lines white
309 drawLine(Qt::white, margin + corner_length + 2, bwidth - margin - corner_length + 1,
310 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
311 bottom_drawn_wide_ = false;
315 void GuiSetBorder::drawBottomLeftTrim(BorderState draw)
330 if (!bottom_trim_left_.enabled)
331 col = QColor(Qt::white);
332 int const lt = corner_length;
333 if (bottom_trim_left_.enabled)
334 drawLine(col, margin + corner_length + 2, bwidth - margin - corner_length + 1,
335 margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1);
339 void GuiSetBorder::drawBottomRightTrim(BorderState draw)
354 if (!bottom_trim_right_.enabled)
355 col = QColor(Qt::white);
356 int const rt = corner_length;
357 if (bottom_trim_right_.enabled)
358 drawLine(col, bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1,
359 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
363 void GuiSetBorder::setLeftEnabled(bool enabled)
365 left_.enabled = enabled;
370 void GuiSetBorder::setRightEnabled(bool enabled)
372 right_.enabled = enabled;
373 drawRight(right_.set);
377 void GuiSetBorder::setTopEnabled(bool enabled)
379 top_.enabled = enabled;
384 void GuiSetBorder::setBottomEnabled(bool enabled)
386 bottom_.enabled = enabled;
387 drawBottom(bottom_.set);
391 void GuiSetBorder::setTopLeftTrimEnabled(bool enabled)
393 top_trim_left_.enabled = enabled;
395 drawTopLeftTrim(top_trim_left_.set);
397 top_drawn_wide_ = !enabled;
401 void GuiSetBorder::setTopRightTrimEnabled(bool enabled)
403 top_trim_right_.enabled = enabled;
405 drawTopRightTrim(top_trim_right_.set);
407 top_drawn_wide_ = !enabled;;
411 void GuiSetBorder::setBottomLeftTrimEnabled(bool enabled)
413 bottom_trim_left_.enabled = enabled;
414 undrawWideBottomLine();
415 drawBottomLeftTrim(bottom_trim_left_.set);
416 drawBottom(bottom_.set);
417 bottom_drawn_wide_ = !enabled;;
421 void GuiSetBorder::setBottomRightTrimEnabled(bool enabled)
423 bottom_trim_right_.enabled = enabled;
424 undrawWideBottomLine();
425 drawBottomRightTrim(bottom_trim_right_.set);
426 drawBottom(bottom_.set);
427 bottom_drawn_wide_ = !enabled;;
431 void GuiSetBorder::setLeft(BorderState border)
438 void GuiSetBorder::setRight(BorderState border)
445 void GuiSetBorder::setTop(BorderState border)
452 void GuiSetBorder::setBottom(BorderState border)
454 bottom_.set = border;
459 void GuiSetBorder::setTopLeftTrim(BorderState border)
461 top_trim_left_.set = border;
462 drawTopLeftTrim(border);
466 void GuiSetBorder::setTopRightTrim(BorderState border)
468 top_trim_right_.set = border;
469 drawTopRightTrim(border);
473 void GuiSetBorder::setBottomLeftTrim(BorderState border)
475 bottom_trim_left_.set = border;
476 drawBottomLeftTrim(border);
479 void GuiSetBorder::setBottomRightTrim(BorderState border)
481 bottom_trim_right_.set = border;
482 drawBottomRightTrim(border);
486 void GuiSetBorder::setAll(BorderState border)
492 setTopLeftTrim(border);
493 setTopRightTrim(border);
494 setBottomLeftTrim(border);
495 setBottomRightTrim(border);
499 GuiSetBorder::BorderState GuiSetBorder::getLeft()
505 GuiSetBorder::BorderState GuiSetBorder::getRight()
511 GuiSetBorder::BorderState GuiSetBorder::getTop()
517 GuiSetBorder::BorderState GuiSetBorder::getBottom()
523 GuiSetBorder::BorderState GuiSetBorder::getTopLeftTrim()
525 return top_trim_left_.set;
529 GuiSetBorder::BorderState GuiSetBorder::getTopRightTrim()
531 return top_trim_right_.set;
535 GuiSetBorder::BorderState GuiSetBorder::getBottomLeftTrim()
537 return bottom_trim_left_.set;
541 GuiSetBorder::BorderState GuiSetBorder::getBottomRightTrim()
543 return bottom_trim_right_.set;
546 #include "moc_GuiSetBorder.cpp"