1
0
Nicolas Winkler 5 rokov pred
rodič
commit
9a8121c74e
7 zmenil súbory, kde vykonal 158 pridanie a 114 odobranie
  1. 2 2
      Almond.cpp
  2. 1 31
      Almond.ui
  3. 84 33
      AlmondMenuWidget.cpp
  4. 12 3
      AlmondMenuWidget.h
  5. 2 0
      ExportVideoMenu.cpp
  6. 52 44
      ExportVideoMenu.ui
  7. 5 1
      libmandel/CMakeLists.txt

+ 2 - 2
Almond.cpp

@@ -46,7 +46,7 @@ Almond::Almond(QWidget* parent) :
     amw->addSubMenu(evm);
     ui.dockWidget_2->setWidget(amw);
 
-    connect(amw, &AlmondMenuWidget::submenuCancel, [this] (int) {amw->showMainMenu();});
+    connect(amw, &AlmondMenuWidget::submenuCancel, [this] (int) { amw->showMainMenu(); });
     connect(amw, &AlmondMenuWidget::submenuOK, this, &Almond::submenuOK);
             
 
@@ -268,7 +268,7 @@ void Almond::on_chooseGradient_clicked()
 void Almond::on_exportVideo_clicked()
 {
     evm->setEndViewport(mw->getViewport());
-    this->amw->showSubMenu(1);
+    emit this->amw->showSubMenu(1);
     return;
     ExportVideoInfo evi;
     evi.start = mnd::MandelViewport::standardView();

+ 1 - 31
Almond.ui

@@ -10,7 +10,7 @@
     <x>0</x>
     <y>0</y>
     <width>1202</width>
-    <height>1262</height>
+    <height>691</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -97,12 +97,6 @@
            <layout class="QFormLayout" name="formLayout">
             <item row="0" column="0" colspan="2">
              <widget class="QPushButton" name="chooseGradient">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
               <property name="text">
                <string>Choose Gradient</string>
               </property>
@@ -117,12 +111,6 @@
             </item>
             <item row="1" column="1">
              <widget class="QLineEdit" name="maxIterations">
-              <property name="minimumSize">
-               <size>
-                <width>70</width>
-                <height>0</height>
-               </size>
-              </property>
               <property name="text">
                <string>500</string>
               </property>
@@ -133,12 +121,6 @@
             </item>
             <item row="2" column="0" colspan="2">
              <widget class="QCheckBox" name="smooth">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
               <property name="text">
                <string>smooth coloring</string>
               </property>
@@ -149,12 +131,6 @@
             </item>
             <item row="3" column="0" colspan="2">
              <widget class="QCheckBox" name="displayInfo">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
               <property name="text">
                <string>display scale</string>
               </property>
@@ -253,12 +229,6 @@
             <property name="enabled">
              <bool>true</bool>
             </property>
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
             <property name="maximum">
              <number>1</number>
             </property>

+ 84 - 33
AlmondMenuWidget.cpp

@@ -1,20 +1,25 @@
 #include "AlmondMenuWidget.h"
 #include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QResizeEvent>
 #include <QPropertyAnimation>
 #include <QParallelAnimationGroup>
 
 AlmondMenuWidget::AlmondMenuWidget(QWidget* parent) :
-    QWidget{ parent },
+    QFrame{ parent },
     mainMenu{ nullptr }
 {
-    QVBoxLayout* layout = new QVBoxLayout(this);
-    layout->setMargin(0);
-
+    this->setContentsMargins(0, 0, 0, 0);
     rightWidget = new QWidget(this);
-    subMenuContainer = new QStackedWidget(this);
-    rightOK = new QPushButton("OK", this);
-    rightCancel = new QPushButton("Cancel", this);
+    subMenuContainer = new QStackedWidget(rightWidget);
+    rightOK = new QPushButton("OK", rightWidget);
+    rightCancel = new QPushButton("Cancel", rightWidget);
     subMenuContainer->setContentsMargins(0, 0, 0, 0);
+    subMenuContainer->setLayout(new QVBoxLayout());
+
+    leftWidget = new QWidget(this);
+    QVBoxLayout* mainLayout = new QVBoxLayout(leftWidget);
+    mainLayout->setMargin(0);
 
     QVBoxLayout* smlayout = new QVBoxLayout(rightWidget);
     smlayout->addWidget(subMenuContainer, 1);
@@ -26,8 +31,24 @@ AlmondMenuWidget::AlmondMenuWidget(QWidget* parent) :
     connect(rightCancel, &QPushButton::clicked,
             this, &AlmondMenuWidget::clickedRightCancel);
 
-    layout->addWidget(rightWidget);
-    rightWidget->hide();
+    //layout->addWidget(rightWidget);
+    //layout->addWidget(leftWidget);
+    rightWidget->setVisible(false);
+
+    /*states = new QStateMachine(this);
+    QState* mainMenuShow = new QState(states);
+    QState* subMenuShow = new QState(states);
+
+    mainMenuShow->assignProperty(leftWidget, "visible", true);
+    mainMenuShow->assignProperty(rightWidget, "visible", false);
+
+    subMenuShow->assignProperty(leftWidget, "visible", false);
+    subMenuShow->assignProperty(leftWidget, "pos", QPoint(100, 100));
+    subMenuShow->assignProperty(rightWidget, "visible", true);
+
+    mainMenuShow->addTransition(this, SIGNAL(showLeft()), subMenuShow);
+    subMenuShow->addTransition(this, SIGNAL(showRight()), mainMenuShow);
+    states->start();*/
 }
 
 
@@ -35,7 +56,7 @@ void AlmondMenuWidget::setMainMenu(QWidget* mainMenu)
 {
     //mainMenu->setParent(this);
     this->mainMenu = mainMenu;
-    this->layout()->addWidget(mainMenu);
+    leftWidget->layout()->addWidget(mainMenu);
 }
 
 
@@ -49,8 +70,7 @@ void AlmondMenuWidget::addSubMenu(QWidget* subMenu)
 QSize AlmondMenuWidget::sizeHint(void) const
 {
     QSize hint{ 0, 0 };
-    if (mainMenu)
-        hint = mainMenu->sizeHint();
+    hint = leftWidget->sizeHint();
     for (auto& widget : subMenus) {
         QSize widgetHint = widget->sizeHint();
         if (hint.width() < widgetHint.width())
@@ -65,8 +85,7 @@ QSize AlmondMenuWidget::sizeHint(void) const
 QSize AlmondMenuWidget::minimumSizeHint(void) const
 {
     QSize hint{ 0, 0 };
-    if (mainMenu)
-        hint = mainMenu->minimumSizeHint();
+    hint = leftWidget->minimumSizeHint();
     for (auto& widget : subMenus) {
         QSize widgetHint = widget->minimumSizeHint();
         if (hint.width() < widgetHint.width())
@@ -78,6 +97,17 @@ QSize AlmondMenuWidget::minimumSizeHint(void) const
 }
 
 
+void AlmondMenuWidget::resizeEvent(QResizeEvent* event)
+{
+    QRect leftGeom = contentsRect();
+    QRect rightGeom = contentsRect();
+    //leftGeom.setSize(event->size());
+    //rightGeom.setSize(event->size());
+    leftWidget->setGeometry(leftGeom);
+    rightWidget->setGeometry(rightGeom);
+}
+
+
 void AlmondMenuWidget::clickedRightOK(void)
 {
     emit submenuOK(subMenuContainer->currentIndex());
@@ -87,22 +117,24 @@ void AlmondMenuWidget::clickedRightOK(void)
 void AlmondMenuWidget::clickedRightCancel(void)
 {
     emit submenuCancel(subMenuContainer->currentIndex());
+    //submenuCancel(0);
 }
 
 
 void AlmondMenuWidget::showMainMenu(void)
 {
+    emit showLeft();
     if (!mainMenu)
         return;
     QParallelAnimationGroup* ag = new QParallelAnimationGroup(this);
-    QPropertyAnimation* mm = new QPropertyAnimation(mainMenu, "geometry", this);
+    QPropertyAnimation* mm = new QPropertyAnimation(leftWidget, "geometry", this);
     QPropertyAnimation* rw = new QPropertyAnimation(rightWidget, "geometry", this);
 
-    mm->setStartValue(rightWidget->geometry().adjusted(-width(), 0, -width(), 0));
-    mm->setEndValue(rightWidget->geometry());
+    mm->setStartValue(contentsRect().adjusted(-width(), 0, -width(), 0));
+    mm->setEndValue(contentsRect());
 
-    rw->setEndValue(rightWidget->geometry().adjusted(width(), 0, width(), 0));
-    rw->setStartValue(rightWidget->geometry());
+    rw->setEndValue(contentsRect().adjusted(width(), 0, width(), 0));
+    rw->setStartValue(contentsRect());
 
     mm->setEasingCurve(QEasingCurve::InOutSine);
     rw->setEasingCurve(QEasingCurve::InOutSine);
@@ -112,27 +144,45 @@ void AlmondMenuWidget::showMainMenu(void)
     ag->addAnimation(mm);
     ag->addAnimation(rw);
 
-    connect(ag, &QParallelAnimationGroup::finished, [this] () { emit rightWidget->hide(); });
+    connect(ag, &QParallelAnimationGroup::finished, [this] () {
+        emit rightWidget->hide();
+        leftWidget->setGeometry(contentsRect());
+    });
 
-    mainMenu->setGeometry(rightWidget->geometry().adjusted(-width(), 0, -width(), 0));
-    emit mainMenu->show();
-    emit ag->start();
+    leftWidget->setGeometry(rightWidget->geometry().adjusted(-width(), 0, -width(), 0));
+    emit leftWidget->show();
+    emit ag->start(QAbstractAnimation::DeleteWhenStopped);
 }
 
 
 void AlmondMenuWidget::showSubMenu(int index)
 {
+    subMenuContainer->setCurrentIndex(index);
+    /*while (subMenuContainer->layout()->count() > 0)
+        subMenuContainer->layout()->takeAt(0);
+    subMenuContainer->layout()->update();
+    rightWidget->setGeometry(leftWidget->geometry().adjusted(width(), 0, width(), 0));
+    //subMenuContainer->layout()->addWidget(subMenus.at(index));
+    subMenuContainer->layout()->update();*/
+
+    showSubMenu();
+}
+
+
+void AlmondMenuWidget::showSubMenu(void)
+{
+    emit showRight();
     if (!mainMenu)
-        return;
+    return;
     QParallelAnimationGroup* ag = new QParallelAnimationGroup(this);
-    QPropertyAnimation* mm = new QPropertyAnimation(mainMenu, "geometry", this);
+    QPropertyAnimation* mm = new QPropertyAnimation(leftWidget, "geometry", this);
     QPropertyAnimation* rw = new QPropertyAnimation(rightWidget, "geometry", this);
 
-    mm->setStartValue(mainMenu->geometry());
-    mm->setEndValue(mainMenu->geometry().adjusted(-width(), 0, -width(), 0));
+    mm->setStartValue(contentsRect());
+    mm->setEndValue(contentsRect().adjusted(-width(), 0, -width(), 0));
 
-    rw->setStartValue(mainMenu->geometry().adjusted(width(), 0, width(), 0));
-    rw->setEndValue(mainMenu->geometry());
+    rw->setStartValue(contentsRect().adjusted(width(), 0, width(), 0));
+    rw->setEndValue(contentsRect());
 
     mm->setEasingCurve(QEasingCurve::InOutSine);
     rw->setEasingCurve(QEasingCurve::InOutSine);
@@ -142,11 +192,12 @@ void AlmondMenuWidget::showSubMenu(int index)
     ag->addAnimation(mm);
     ag->addAnimation(rw);
 
-    connect(ag, &QParallelAnimationGroup::finished, [this] () { mainMenu->hide(); });
-
-    subMenuContainer->setCurrentIndex(index);
+    connect(ag, &QParallelAnimationGroup::finished, [this] () {
+        leftWidget->hide();
+        rightWidget->setGeometry(contentsRect());
+    });
 
     rightWidget->setGeometry(mainMenu->geometry().adjusted(width(), 0, width(), 0));
     emit rightWidget->setVisible(true);
-    emit ag->start();
+    emit ag->start(QAbstractAnimation::DeleteWhenStopped);
 }

+ 12 - 3
AlmondMenuWidget.h

@@ -1,21 +1,24 @@
 #ifndef ALMONDMENUWIDGET_H
 #define ALMONDMENUWIDGET_H
 
-#include <QWidget>
+#include <QFrame>
 #include <QList>
 #include <QStackedWidget>
 #include <QPushButton>
+#include <QStateMachine>
 
-class AlmondMenuWidget : public QWidget
+class AlmondMenuWidget : public QFrame
 {
     Q_OBJECT
-
+        
     QWidget* mainMenu;
     QWidget* rightWidget;
+    QWidget* leftWidget;
     QPushButton* rightOK;
     QPushButton* rightCancel;
     QStackedWidget* subMenuContainer;
     QList<QWidget*> subMenus;
+    QStateMachine* states;
 public:
     AlmondMenuWidget(QWidget* parent = nullptr);
 
@@ -24,6 +27,8 @@ public:
 
     virtual QSize sizeHint(void) const override;
     virtual QSize minimumSizeHint(void) const override;
+protected:
+    virtual void resizeEvent(QResizeEvent* event) override;
 
 protected slots:
     void clickedRightOK(void);
@@ -32,10 +37,14 @@ protected slots:
 public slots:
     void showMainMenu(void);
     void showSubMenu(int index);
+    void showSubMenu(void);
 
 signals:
     void submenuOK(int index);
     void submenuCancel(int index);
+
+    void showLeft();
+    void showRight();
 };
 
 #endif // ALMONDMENUWIDGET_H

+ 2 - 0
ExportVideoMenu.cpp

@@ -90,6 +90,8 @@ ExportVideoInfo ExportVideoMenu::getInfo(void) const
 
     evi.start.adjustAspectRatio(evi.mi.bWidth, evi.mi.bHeight);
     evi.end.adjustAspectRatio(evi.mi.bWidth, evi.mi.bHeight);
+
+    return evi;
 }
 
 

+ 52 - 44
ExportVideoMenu.ui

@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>253</width>
+    <width>328</width>
     <height>543</height>
    </rect>
   </property>
@@ -31,14 +31,14 @@
    <item>
     <widget class="QToolBox" name="toolBox">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
        <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
+       <verstretch>1</verstretch>
       </sizepolicy>
      </property>
      <widget class="QWidget" name="toolBoxPage1">
       <property name="sizePolicy">
-       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
@@ -54,6 +54,13 @@
          </property>
         </widget>
        </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="maxIterTxt">
+         <property name="text">
+          <string>5000</string>
+         </property>
+        </widget>
+       </item>
        <item row="1" column="0">
         <widget class="QLabel" name="widthLbl">
          <property name="text">
@@ -61,44 +68,27 @@
          </property>
         </widget>
        </item>
-       <item row="2" column="0">
-        <widget class="QLabel" name="heightLbl">
+       <item row="1" column="1">
+        <widget class="QLineEdit" name="widthTxt">
          <property name="text">
-          <string>Video Height</string>
+          <string>1920</string>
          </property>
         </widget>
        </item>
-       <item row="4" column="0" colspan="2">
-        <widget class="QGroupBox" name="groupBox_2">
-         <property name="title">
-          <string>End View</string>
+       <item row="2" column="0">
+        <widget class="QLabel" name="heightLbl">
+         <property name="text">
+          <string>Video Height</string>
          </property>
-         <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="0">
-           <widget class="QLineEdit" name="endX"/>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLineEdit" name="endW"/>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="endH"/>
-          </item>
-          <item row="0" column="1">
-           <widget class="QLineEdit" name="endY"/>
-          </item>
-         </layout>
         </widget>
        </item>
-       <item row="5" column="0">
-        <widget class="QPushButton" name="pathBtn">
+       <item row="2" column="1">
+        <widget class="QLineEdit" name="heightTxt">
          <property name="text">
-          <string>Save As</string>
+          <string>1080</string>
          </property>
         </widget>
        </item>
-       <item row="5" column="1">
-        <widget class="QLineEdit" name="pathTxt"/>
-       </item>
        <item row="3" column="0" colspan="2">
         <widget class="QGroupBox" name="groupBox">
          <property name="title">
@@ -120,30 +110,48 @@
          </layout>
         </widget>
        </item>
-       <item row="2" column="1">
-        <widget class="QLineEdit" name="heightTxt">
-         <property name="text">
-          <string>1080</string>
+       <item row="4" column="0" colspan="2">
+        <widget class="QGroupBox" name="groupBox_2">
+         <property name="title">
+          <string>End View</string>
          </property>
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0">
+           <widget class="QLineEdit" name="endX"/>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLineEdit" name="endW"/>
+          </item>
+          <item row="1" column="1">
+           <widget class="QLineEdit" name="endH"/>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLineEdit" name="endY"/>
+          </item>
+         </layout>
         </widget>
        </item>
-       <item row="1" column="1">
-        <widget class="QLineEdit" name="widthTxt">
+       <item row="5" column="0">
+        <widget class="QPushButton" name="pathBtn">
          <property name="text">
-          <string>1920</string>
+          <string>Save As</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1">
-        <widget class="QLineEdit" name="maxIterTxt">
-         <property name="text">
-          <string>5000</string>
-         </property>
-        </widget>
+       <item row="5" column="1">
+        <widget class="QLineEdit" name="pathTxt"/>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="toolBoxPage2">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>310</width>
+        <height>442</height>
+       </rect>
+      </property>
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
         <horstretch>0</horstretch>

+ 5 - 1
libmandel/CMakeLists.txt

@@ -4,7 +4,11 @@ include(CheckCXXCompilerFlag)
 
 project(mandel VERSION 1.0.0 DESCRIPTION "library for mandelbrot calculations")
 
-set(MANDEL_TARGET_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture")
+if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
+    set(MANDEL_TARGET_ARCHITECTURE "aarch64" CACHE STRING "Target Architecture")
+else()
+    set(MANDEL_TARGET_ARCHITECTURE "x86_64" CACHE STRING "Target Architecture")
+endif()
 option(MANDEL_AVX512 "generate code that can make use of avx-512-instructions" ON)
 option(MANDEL_ASMJIT "use just-in-time-compilation library asmjit" ON)
 option(MANDEL_BUILD_NATIVE