OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::UiAMSSlot Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp>

Inheritance diagram for Slic3r::GUI::UiAMSSlot:
Collaboration diagram for Slic3r::GUI::UiAMSSlot:

Public Member Functions

 UiAMSSlot (wxWindow *parent, const std::vector< wxColour > &bgColours, const wxString &text, DataStatusType status, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, double colourFactor=1.0, double scaleFactor=1.0)

Private Member Functions

void OnPaint (wxPaintEvent &)
void DrawRectangle (wxPaintDC &dc, const wxSize &cli)
void DrawLine (wxPaintDC &dc, const wxSize &cli)
wxColour LightenColour (const wxColour &original)
bool IsDark (const wxColour &c)

Private Attributes

std::vector< wxColour > m_bgColours
wxString m_text
DataStatusType m_status
wxSize m_size
ScalableBitmap * m_ams_slot_readonly {nullptr}
int m_rectangleW = 44
int m_rectangleH = 62
int rectangleW = 44
int rectangleH = 62
double m_colourFactor = 1.0f
double m_scaleFactor = 1.0f

Detailed Description

Constructor & Destructor Documentation

◆ UiAMSSlot()

Slic3r::GUI::UiAMSSlot::UiAMSSlot ( wxWindow * parent,
const std::vector< wxColour > & bgColours,
const wxString & text,
DataStatusType status,
wxWindowID id = wxID_ANY,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
double colourFactor = 1.0,
double scaleFactor = 1.0 )
344 : wxPanel(parent, id, pos, wxDefaultSize, wxBORDER_NONE),
345 m_bgColours(bgColours), m_text(text), m_status(status), m_size(size), m_colourFactor(colourFactor), m_scaleFactor(scaleFactor)
346{
347 SetDoubleBuffered(true);
348 SetBackgroundStyle(wxBG_STYLE_PAINT);
349 m_ams_slot_readonly = new ScalableBitmap(this, "ams_readonly", 10 * m_scaleFactor); // Orca: reuse the existing readonly glyph
350
351 m_size = wxSize(
352 static_cast<int>(size.GetWidth() * scaleFactor),
353 static_cast<int>(size.GetHeight() * scaleFactor)
354 );
355 SetMinSize(m_size);
356 // SetMaxSize(m_size);
357 Bind(wxEVT_PAINT, &UiAMSSlot::OnPaint, this);
358}
wxString m_text
Definition uiAMSBestPositionPopup.hpp:153
double m_scaleFactor
Definition uiAMSBestPositionPopup.hpp:162
ScalableBitmap * m_ams_slot_readonly
Definition uiAMSBestPositionPopup.hpp:156
std::vector< wxColour > m_bgColours
Definition uiAMSBestPositionPopup.hpp:152
DataStatusType m_status
Definition uiAMSBestPositionPopup.hpp:154
wxSize m_size
Definition uiAMSBestPositionPopup.hpp:155
void OnPaint(wxPaintEvent &)
Definition uiAMSBestPositionPopup.cpp:539
double m_colourFactor
Definition uiAMSBestPositionPopup.hpp:161

References m_ams_slot_readonly, m_bgColours, m_colourFactor, m_scaleFactor, m_size, m_status, m_text, and OnPaint().

Here is the call graph for this function:

Member Function Documentation

◆ DrawLine()

void Slic3r::GUI::UiAMSSlot::DrawLine ( wxPaintDC & dc,
const wxSize & cli )
private
447{
448 // no scaled
449 int bgRemainPointX = (cli.x - FromDIP(30)) / 2;
450 int bgRemainPointY = 0;
451 int bgRemainH = FromDIP(4);
452 int bgRemainW = FromDIP(30);
453 int forRemainW = FromDIP(30 - 8);
454 //remain status bar
455 dc.SetBrush(wxBrush(wxColour("#c2c2c2")));
456 dc.SetPen(wxPen(wxColour("#c2c2c2")));
457 dc.DrawRoundedRectangle(wxRect(bgRemainPointX, 0, bgRemainW, bgRemainH), FromDIP(3));
458
459 if (!m_bgColours.empty()) {
460 if (m_bgColours.size() == 1) {
461 dc.SetBrush(wxBrush(LightenColour(m_bgColours[0])));
462 dc.SetPen(wxPen(LightenColour(m_bgColours[0])));
463 dc.DrawRoundedRectangle(wxRect(bgRemainPointX, bgRemainPointY, forRemainW, bgRemainH), FromDIP(3));
464 } else {
465 auto step = bgRemainH / m_bgColours.size();
466 for (int i = 0; i < m_bgColours.size(); i++) {
467 dc.SetBrush(wxBrush(LightenColour(m_bgColours[i])));
468 dc.SetPen(wxPen(LightenColour(m_bgColours[i])));
469 dc.DrawRoundedRectangle(wxRect(bgRemainPointX, bgRemainPointY + step * i, forRemainW, bgRemainH / m_bgColours.size()), FromDIP(3));
470 }
471 }
472 }
473
475 {
476 dc.SetBrush(wxColour("#ff6f00"));
477 dc.SetPen(wxPen(wxColour("#ff6f00")));
478 //top
479 int topGap = static_cast<int>(FromDIP(8) * m_scaleFactor);
480 int bottomGap = static_cast<int>(FromDIP(4) * m_scaleFactor);
481 int tbHeight = static_cast<int>(FromDIP(3) * m_scaleFactor);
482 dc.DrawRectangle(wxRect((cli.x - rectangleW) / 2, (cli.y - rectangleH - topGap) / 2, rectangleW, tbHeight));
483 //bottom
484 dc.DrawRectangle(wxRect((cli.x - rectangleW) / 2, (cli.y - rectangleH - topGap) / 2 + rectangleH + bottomGap, rectangleW, tbHeight));
485
486 // left
487 int radius = static_cast<int>(FromDIP(4) * m_scaleFactor);
488 int width = static_cast<int>(FromDIP(10) * m_scaleFactor);
489 int height = static_cast<int>(cli.y - FromDIP(3));
490 dc.DrawRoundedRectangle(wxRect(0, FromDIP(static_cast<int>(3 * m_scaleFactor)), width, height), radius);
491 //right
492 // dc.DrawRectangle(wxRect(55, 7, 3, 78));
493 dc.DrawRoundedRectangle(wxRect(static_cast<int>(cli.x - FromDIP(10) * m_scaleFactor),
494 static_cast<int>(FromDIP(3) * m_scaleFactor),
495 static_cast<int>(FromDIP(10) * m_scaleFactor),
496 static_cast<int>(cli.y - FromDIP(3))), radius);
497 }
498
500 {
501 dc.SetBrush(wxColour(144, 144, 144));
502 dc.SetPen(wxPen(wxColour(144, 144, 144)));
503 dc.DrawRoundedRectangle(wxRect(FromDIP(static_cast<int>(3 * m_scaleFactor)),
504 FromDIP(static_cast<int>(6 * m_scaleFactor)),
505 FromDIP(static_cast<int>(4 * m_scaleFactor)),
506 FromDIP(static_cast<int>(81 * m_scaleFactor))), FromDIP(static_cast<int>(2 * m_scaleFactor)));
507 dc.DrawRoundedRectangle(wxRect(FromDIP(static_cast<int>(51 * m_scaleFactor)),
508 FromDIP(static_cast<int>(6 * m_scaleFactor)),
509 FromDIP(static_cast<int>(4 * m_scaleFactor)),
510 FromDIP(static_cast<int>(81 * m_scaleFactor))), FromDIP(static_cast<int>(2 * m_scaleFactor)));
511 }
512
513}
int rectangleW
Definition uiAMSBestPositionPopup.hpp:159
int rectangleH
Definition uiAMSBestPositionPopup.hpp:160
wxColour LightenColour(const wxColour &original)
Definition uiAMSBestPositionPopup.cpp:515
@ ADJUST
Definition uiAMSBestPositionPopup.hpp:120
@ UNMATCHED
Definition uiAMSBestPositionPopup.hpp:122
coord_t width(const BoundingBox &box)
Definition Arrange.cpp:1184
coord_t height(const BoundingBox &box)
Definition Arrange.cpp:1185
void step(Coord &crd, const Dir d, const long n=1)
Definition MarchingSquares.hpp:213

References Slic3r::GUI::ADJUST, LightenColour(), m_bgColours, m_scaleFactor, m_status, rectangleH, rectangleW, and Slic3r::GUI::UNMATCHED.

Referenced by OnPaint().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawRectangle()

void Slic3r::GUI::UiAMSSlot::DrawRectangle ( wxPaintDC & dc,
const wxSize & cli )
private
361{
362
363 if (!m_bgColours.empty())
364 {
365 auto baseX = (cli.x - rectangleW) / 2;
366 auto step = rectangleW / m_bgColours.size();
367
368 for (int i = 0; i < m_bgColours.size(); i++)
369 {
370 wxRect rr(baseX + step * i, (cli.y - rectangleH) / 2, step, rectangleH);
371
372 dc.SetBrush(wxBrush(LightenColour(m_bgColours[i])));
373 dc.SetPen(wxPen(LightenColour(m_bgColours[i])));
374 dc.DrawRectangle(rr);
375 }
376 }
377
378 wxString line1 = m_text.BeforeFirst('\n');
379 wxString line2 = m_text.AfterFirst ('\n');
380 wxFont font12 = ::Label::Body_12;
381 wxFont font14 = ::Label::Body_14;
382 int newSizeFont12 = static_cast<int>(font12.GetPointSize() * m_scaleFactor);
383 int newSizeFont14 = static_cast<int>(font14.GetPointSize() * m_scaleFactor);
384 newSizeFont12 = std::max(1, newSizeFont12);
385 newSizeFont14 = std::max(1, newSizeFont14);
386 font12.SetPointSize(newSizeFont12);
387 font14.SetPointSize(newSizeFont14);
388 wxColour textColour = wxColour("#000000");
389 if (!m_bgColours.empty())
390 {
391 textColour = IsDark(m_bgColours.front()) ? wxColour("#FFFFFF")
392 : wxColour("#000000");
393 }
394
395 dc.SetTextForeground(textColour);
396
397 dc.SetFont(font12);
398 // dc.SetFont(::Label::Body_12);
399 wxCoord w1, h1;
400 dc.GetTextExtent(_L(line1), &w1, &h1);
401
402 dc.SetFont(font14);
403 // dc.SetFont(::Label::Body_14);
404 wxCoord w2, h2;
405 dc.GetTextExtent(_L(line2), &w2, &h2);
406
407 int maxLine2Width = rectangleW - FromDIP(2);
408 if (w2 > maxLine2Width && newSizeFont14 > 1)
409 {
410 int currentFontSize = newSizeFont14;
411 while (currentFontSize > 1)
412 {
413 currentFontSize--;
414 font14.SetPointSize(currentFontSize);
415 dc.SetFont(font14);
416 dc.GetTextExtent(_L(line2), &w2, &h2);
417 if (w2 <= maxLine2Width)
418 {
419 break;
420 }
421 }
422 }
423
424 int topGap = static_cast<int>(FromDIP(5) * m_scaleFactor);
425 int textGap = static_cast<int>(FromDIP(5) * m_scaleFactor);
426 int bmpH = m_ams_slot_readonly->GetBmpHeight();
427 int bmpW = m_ams_slot_readonly->GetBmpWidth();
428 int baseY = (cli.y - h1 - h2 - topGap - textGap - bmpH - textGap) / 2;
429
430 dc.SetFont(font12);
431 // dc.SetFont(::Label::Body_12);
432 dc.DrawText(_L(line1), (cli.x - w1) / 2, baseY + topGap);
433 dc.SetFont(font14);
434 // dc.SetFont(::Label::Body_14);
435 dc.DrawText(_L(line2), (cli.x - w2) / 2, baseY + topGap + h1 + textGap);
436
437 //draw svg
438 if (line2 != "Empty")
439 {
440 dc.SetPen(*wxTRANSPARENT_PEN);
441 dc.SetBrush(*wxWHITE);
442 dc.DrawBitmap(m_ams_slot_readonly->bmp(), wxPoint((cli.x - bmpW) / 2, baseY + topGap + h1 + textGap + h2 + textGap));
443 }
444}
#define _L(s)
Definition OBJ.cpp:34
static wxFont Body_12
Definition Label.hpp:55
static wxFont Body_14
Definition Label.hpp:53
bool IsDark(const wxColour &c)
Definition uiAMSBestPositionPopup.hpp:144

References _L, Label::Body_12, Label::Body_14, IsDark(), LightenColour(), m_ams_slot_readonly, m_bgColours, m_scaleFactor, m_text, rectangleH, and rectangleW.

Referenced by OnPaint().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsDark()

bool Slic3r::GUI::UiAMSSlot::IsDark ( const wxColour & c)
inlineprivate
145 {
146 int brightness = (c.Red() * 299 + c.Green() * 587 + c.Blue() * 114) / 1000;
147 return brightness < 128; // 0-255 range, 128 mid
148 }

Referenced by DrawRectangle().

Here is the caller graph for this function:

◆ LightenColour()

wxColour Slic3r::GUI::UiAMSSlot::LightenColour ( const wxColour & original)
private
516{
517 if (std::abs(m_colourFactor - 1.0) < 1e-3)
518 {
519 return original;
520 }
521 m_colourFactor = std::clamp(m_colourFactor, 0.0, 1.0);
522
523 int r = original.Red();
524 int g = original.Green();
525 int b = original.Blue();
526 int a = original.Alpha();
527
528 r = static_cast<int>(r + (255 - r) * (1 - m_colourFactor));
529 g = static_cast<int>(g + (255 - g) * (1 - m_colourFactor));
530 b = static_cast<int>(b + (255 - b) * (1 - m_colourFactor));
531
532 r = std::min(r, 255);
533 g = std::min(g, 255);
534 b = std::min(b, 255);
535
536 return wxColour(r, g, b, a);
537}

References m_colourFactor.

Referenced by DrawLine(), and DrawRectangle().

Here is the caller graph for this function:

◆ OnPaint()

void Slic3r::GUI::UiAMSSlot::OnPaint ( wxPaintEvent & )
private
540{
541 wxPaintDC dc(this);
542 dc.Clear();
543 //draw all background
544 rectangleW = FromDIP(m_rectangleW);
545 rectangleH = FromDIP(m_rectangleH);
546 rectangleW = static_cast<int>(rectangleW * m_scaleFactor);
547 rectangleH = static_cast<int>(rectangleH * m_scaleFactor);
548 wxSize cli = GetClientSize();
549 dc.SetBrush(wxBrush(wxColour("#ffffff")));
550 dc.SetPen(wxPen(wxColour("#ffffff")));
551 if (m_scaleFactor < 1.0)
552 {
553 dc.SetBrush(wxBrush(wxColour("#F8F8F8")));
554 dc.SetPen(wxPen(wxColour("#F8F8F8")));
555 }
556 dc.DrawRectangle(wxRect(0, 0, cli.x, cli.y));
557 DrawLine(dc, cli);
558 DrawRectangle(dc, cli);
559}
int m_rectangleH
Definition uiAMSBestPositionPopup.hpp:158
int m_rectangleW
Definition uiAMSBestPositionPopup.hpp:157
void DrawLine(wxPaintDC &dc, const wxSize &cli)
Definition uiAMSBestPositionPopup.cpp:446
void DrawRectangle(wxPaintDC &dc, const wxSize &cli)
Definition uiAMSBestPositionPopup.cpp:360

References DrawLine(), DrawRectangle(), m_rectangleH, m_rectangleW, m_scaleFactor, rectangleH, and rectangleW.

Referenced by UiAMSSlot().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_ams_slot_readonly

ScalableBitmap* Slic3r::GUI::UiAMSSlot::m_ams_slot_readonly {nullptr}
private
156{nullptr};

Referenced by UiAMSSlot(), and DrawRectangle().

◆ m_bgColours

std::vector<wxColour> Slic3r::GUI::UiAMSSlot::m_bgColours
private

Referenced by UiAMSSlot(), DrawLine(), and DrawRectangle().

◆ m_colourFactor

double Slic3r::GUI::UiAMSSlot::m_colourFactor = 1.0f
private

Referenced by UiAMSSlot(), and LightenColour().

◆ m_rectangleH

int Slic3r::GUI::UiAMSSlot::m_rectangleH = 62
private

Referenced by OnPaint().

◆ m_rectangleW

int Slic3r::GUI::UiAMSSlot::m_rectangleW = 44
private

Referenced by OnPaint().

◆ m_scaleFactor

double Slic3r::GUI::UiAMSSlot::m_scaleFactor = 1.0f
private

◆ m_size

wxSize Slic3r::GUI::UiAMSSlot::m_size
private

Referenced by UiAMSSlot().

◆ m_status

DataStatusType Slic3r::GUI::UiAMSSlot::m_status
private

Referenced by UiAMSSlot(), and DrawLine().

◆ m_text

wxString Slic3r::GUI::UiAMSSlot::m_text
private

Referenced by UiAMSSlot(), and DrawRectangle().

◆ rectangleH

int Slic3r::GUI::UiAMSSlot::rectangleH = 62
private

Referenced by DrawLine(), DrawRectangle(), and OnPaint().

◆ rectangleW

int Slic3r::GUI::UiAMSSlot::rectangleW = 44
private

Referenced by DrawLine(), DrawRectangle(), and OnPaint().


The documentation for this class was generated from the following files: