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 (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
84 if (e->position().y() > e->position().x()) {
85 if (e->position().y() < height() - e->position().x()) {
87 if (e->y() > e->x()) {
88 if (e->y() < height() - e->x()) {
91 setLeft(left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
96 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
97 if (bottom_trim_left_.enabled && e->position().x() < margin + 4 + 2 * corner_length) {
99 if (bottom_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
101 setBottomLeftTrim(bottom_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
104 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
105 } else if (bottom_trim_right_.enabled && e->position().x() > bwidth - margin - 2 * corner_length - 4) {
107 } else if (bottom_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
109 setBottomRightTrim(bottom_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
112 } else if (bottom_.enabled) {
113 setBottom(bottom_.set == LINE_SET ? LINE_UNSET : LINE_SET);
119 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
120 if (e->position().y() < height() - e->position().x()) {
121 if (top_trim_left_.enabled && e->position().x() < margin + 4 + 2 * corner_length) {
123 if (e->y() < height() - e->x()) {
124 if (top_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
126 setTopLeftTrim(top_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
129 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
130 } else if (top_trim_right_.enabled && e->position().x() > bwidth - margin - 2 * corner_length - 4) {
132 } else if (top_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
134 setTopRightTrim(top_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
137 } else if (top_.enabled) {
138 setTop(top_.set == LINE_SET ? LINE_UNSET : LINE_SET);
143 if (right_.enabled) {
144 setRight(right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
156 void GuiSetBorder::drawLine(QColor const & col, int x, int y, int x2, int y2)
158 QPainter paint(&buffer);
159 QPen p = paint.pen();
163 paint.drawLine(x, y, x2, y2);
167 void GuiSetBorder::drawLeft(BorderState draw)
183 col = QColor(Qt::lightGray);
184 drawLine(col, margin + corner_length, margin + corner_length + 2,
185 margin + corner_length, bheight - margin - corner_length - 1);
189 void GuiSetBorder::drawRight(BorderState draw)
205 col = QColor(Qt::lightGray);
206 drawLine(col, bheight - margin - corner_length + 1, margin + corner_length + 2,
207 bheight - margin - corner_length + 1, bheight - margin - corner_length - 1);
211 void GuiSetBorder::drawTop(BorderState draw)
217 top_drawn_wide_ = true;
221 top_drawn_wide_ = false;
226 top_drawn_wide_ = true;
230 col = QColor(Qt::lightGray);
231 int const lt = (top_trim_left_.enabled) ? corner_length + 4 : 0;
232 int const rt = (top_trim_right_.enabled) ? corner_length + 4 : 0;
233 drawLine(col, margin + corner_length + 2 + lt, margin + corner_length,
234 bwidth - margin - corner_length - 1 - rt, margin + corner_length);
238 void GuiSetBorder::undrawWideTopLine(bool const right)
240 if (!top_drawn_wide_ && !right)
243 // Overpaint previous lines white
245 drawLine(Qt::white, margin + 2 * (corner_length + 2), margin + corner_length,
246 bwidth - margin - corner_length - 1, margin + corner_length);
248 drawLine(Qt::white, margin + corner_length + 2, margin + corner_length,
249 bwidth - margin - corner_length - 1, margin + corner_length);
250 top_drawn_wide_ = false;
254 void GuiSetBorder::drawTopLeftTrim(BorderState draw)
269 if (!top_trim_left_.enabled)
270 col = QColor(Qt::white);
271 int const lt = corner_length;
272 if (top_trim_left_.enabled)
273 drawLine(col, margin + corner_length + 2, margin + corner_length,
274 margin + corner_length + 2 + lt, margin + corner_length);
278 void GuiSetBorder::drawTopRightTrim(BorderState draw)
293 if (!top_trim_right_.enabled)
294 col = QColor(Qt::white);
295 int const rt = corner_length;
296 if (top_trim_right_.enabled)
297 drawLine(col, bwidth - margin - corner_length - 1 - rt, margin + corner_length,
298 bwidth - margin - corner_length - 1, margin + corner_length);
302 void GuiSetBorder::drawBottom(BorderState draw)
308 bottom_drawn_wide_ = true;
312 bottom_drawn_wide_ = false;
317 bottom_drawn_wide_ = true;
320 if (!bottom_.enabled)
321 col = QColor(Qt::lightGray);
322 int const lt = (bottom_trim_left_.enabled) ? corner_length + 4 : 0;
323 int const rt = (bottom_trim_right_.enabled) ? corner_length + 4 : 0;
324 drawLine(col, margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1,
325 bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1);
329 void GuiSetBorder::undrawWideBottomLine(bool const right)
331 if (!bottom_drawn_wide_ && !right)
334 // Overpaint previous lines white
336 drawLine(Qt::white, margin + 2 * (corner_length + 2), bwidth - margin - corner_length + 1,
337 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
339 drawLine(Qt::white, margin + corner_length + 2, bwidth - margin - corner_length + 1,
340 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
341 bottom_drawn_wide_ = false;
345 void GuiSetBorder::drawBottomLeftTrim(BorderState draw)
360 if (!bottom_trim_left_.enabled)
361 col = QColor(Qt::white);
362 int const lt = corner_length;
363 if (bottom_trim_left_.enabled)
364 drawLine(col, margin + corner_length + 2, bwidth - margin - corner_length + 1,
365 margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1);
369 void GuiSetBorder::drawBottomRightTrim(BorderState draw)
384 if (!bottom_trim_right_.enabled)
385 col = QColor(Qt::white);
386 int const rt = corner_length;
387 if (bottom_trim_right_.enabled)
388 drawLine(col, bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1,
389 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
393 void GuiSetBorder::setLeftEnabled(bool enabled)
395 left_.enabled = enabled;
400 void GuiSetBorder::setRightEnabled(bool enabled)
402 right_.enabled = enabled;
403 drawRight(right_.set);
407 void GuiSetBorder::setTopEnabled(bool enabled)
409 top_.enabled = enabled;
414 void GuiSetBorder::setBottomEnabled(bool enabled)
416 bottom_.enabled = enabled;
417 drawBottom(bottom_.set);
421 void GuiSetBorder::setTopLeftTrimEnabled(bool enabled)
423 top_trim_left_.enabled = enabled;
425 drawTopLeftTrim(top_trim_left_.set);
427 top_drawn_wide_ = !enabled;
431 void GuiSetBorder::setTopRightTrimEnabled(bool enabled)
433 top_trim_right_.enabled = enabled;
434 undrawWideTopLine(enabled);
435 drawTopRightTrim(top_trim_right_.set);
437 top_drawn_wide_ = !enabled;
441 void GuiSetBorder::setBottomLeftTrimEnabled(bool enabled)
443 bottom_trim_left_.enabled = enabled;
444 undrawWideBottomLine();
445 drawBottomLeftTrim(bottom_trim_left_.set);
446 drawBottom(bottom_.set);
447 bottom_drawn_wide_ = !enabled;
451 void GuiSetBorder::setBottomRightTrimEnabled(bool enabled)
453 bottom_trim_right_.enabled = enabled;
454 undrawWideBottomLine(enabled);
455 drawBottomRightTrim(bottom_trim_right_.set);
456 drawBottom(bottom_.set);
457 bottom_drawn_wide_ = !enabled;
461 void GuiSetBorder::setLeft(BorderState border)
468 void GuiSetBorder::setRight(BorderState border)
475 void GuiSetBorder::setTop(BorderState border)
482 void GuiSetBorder::setBottom(BorderState border)
484 bottom_.set = border;
489 void GuiSetBorder::setTopLeftTrim(BorderState border)
491 top_trim_left_.set = border;
492 drawTopLeftTrim(border);
496 void GuiSetBorder::setTopRightTrim(BorderState border)
498 top_trim_right_.set = border;
499 drawTopRightTrim(border);
503 void GuiSetBorder::setBottomLeftTrim(BorderState border)
505 bottom_trim_left_.set = border;
506 drawBottomLeftTrim(border);
509 void GuiSetBorder::setBottomRightTrim(BorderState border)
511 bottom_trim_right_.set = border;
512 drawBottomRightTrim(border);
516 void GuiSetBorder::setAll(BorderState border)
522 setTopLeftTrim(border);
523 setTopRightTrim(border);
524 setBottomLeftTrim(border);
525 setBottomRightTrim(border);
529 GuiSetBorder::BorderState GuiSetBorder::getLeft()
535 GuiSetBorder::BorderState GuiSetBorder::getRight()
541 GuiSetBorder::BorderState GuiSetBorder::getTop()
547 GuiSetBorder::BorderState GuiSetBorder::getBottom()
553 GuiSetBorder::BorderState GuiSetBorder::getTopLeftTrim()
555 return top_trim_left_.set;
559 GuiSetBorder::BorderState GuiSetBorder::getTopRightTrim()
561 return top_trim_right_.set;
565 GuiSetBorder::BorderState GuiSetBorder::getBottomLeftTrim()
567 return bottom_trim_left_.set;
571 GuiSetBorder::BorderState GuiSetBorder::getBottomRightTrim()
573 return bottom_trim_right_.set;
576 #include "moc_GuiSetBorder.cpp"