diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py
index 8a018a3d550c81f77c73179386b5544eacd90f33..b81ea9d4a6cfcabcaea071154fcaaec452a8e84a 100644
--- a/b_asic/GUI/drag_button.py
+++ b/b_asic/GUI/drag_button.py
@@ -26,6 +26,8 @@ class DragButton(QPushButton):
         self.operation_path_name = operation_path_name
         self.clicked = 0
         self.pressed = False
+        self._mouse_press_pos = None
+        self._mouse_move_pos = None
         super(DragButton, self).__init__(self._window)
 
     def contextMenuEvent(self, event):
@@ -35,20 +37,18 @@ class DragButton(QPushButton):
         properties.triggered.connect(self.show_properties_window)
         menu.exec_(self.cursor().pos())
 
-    def show_properties_window(self):
-        self.properties_window = PropertiesWindow(self, self.__window)
+    def show_properties_window(self, event):
+        self.properties_window = PropertiesWindow(self, self._window)
         self.properties_window.show()
-    
+
     def add_label(self, label):
         self.label = label
 
     def mousePressEvent(self, event):
-        self._mouse_press_pos = None
-        self._mouse_move_pos = None
 
         if event.button() == Qt.LeftButton:
-            self._mouse_press_pos = event.globalPos()
-            self._mouse_move_pos = event.globalPos()
+            self._mouse_press_pos = event.pos()
+            self._mouse_move_pos = event.pos()
 
             for signal in self._window.signalList:
                 signal.update()
@@ -77,20 +77,14 @@ class DragButton(QPushButton):
 
     def mouseMoveEvent(self, event):
         if event.buttons() == Qt.LeftButton:
-            cur_pos = self.mapToGlobal(self.pos())
-            global_pos = event.globalPos()
-            diff = global_pos - self._mouse_move_pos
-            new_pos = self.mapFromGlobal(cur_pos + diff)
-            self.move(new_pos)
-
-            self._mouse_move_pos = global_pos
+            self.move(self.mapToParent(event.pos() - self._mouse_press_pos))
 
         self._window.update()
         super(DragButton, self).mouseMoveEvent(event)
 
     def mouseReleaseEvent(self, event):
         if self._mouse_press_pos is not None:
-            moved = event.globalPos() - self._mouse_press_pos
+            moved = event.pos() - self._mouse_press_pos
             if moved.manhattanLength() > 3:
                 event.ignore()
                 return
diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py
index bc31b1d3403461ca0ecbece1a2d641e256e5a39b..aa30dc2a4d913acfbe3398750a105dd8bb9e2c91 100644
--- a/b_asic/GUI/main_window.py
+++ b/b_asic/GUI/main_window.py
@@ -26,6 +26,10 @@ QGraphicsProxyWidget
 from PyQt5.QtCore import Qt, QSize
 from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence
 
+
+MIN_WIDTH_SCENE = 600
+MIN_HEIGHT_SCENE = 520
+
 @decorate_class(handle_error)
 class MainWindow(QMainWindow):
     def __init__(self):
@@ -68,19 +72,25 @@ class MainWindow(QMainWindow):
         self.create_graphics_view()
 
     def create_graphics_view(self):
-        self.scene = QGraphicsScene()
+        self.scene = QGraphicsScene(self)
         self.graphic_view = QGraphicsView(self.scene, self)
         self.graphic_view.setRenderHint(QPainter.Antialiasing)
-        self.graphic_view.setGeometry(250, 40, 600, 520)
+        self.graphic_view.setGeometry(self.ui.operation_box.width(), 0, self.width(), self.height())
         self.graphic_view.setDragMode(QGraphicsView.ScrollHandDrag)
 
+    def resizeEvent(self, event):
+        self.ui.operation_box.setGeometry(10, 10, self.ui.operation_box.width(), self.height())
+        self.graphic_view.setGeometry(self.ui.operation_box.width() + 20, 0, self.width() - self.ui.operation_box.width() - 20, self.height())
+        super(MainWindow, self).resizeEvent(event)
+
     def wheelEvent(self, event):
-        old_zoom = self.zoom
-        self.zoom += event.angleDelta().y()/2500
-        self.graphic_view.scale(self.zoom, self.zoom)
-        self.zoom = old_zoom
+        if event.modifiers() == Qt.ControlModifier:
+            old_zoom = self.zoom
+            self.zoom += event.angleDelta().y()/2500
+            self.graphic_view.scale(self.zoom, self.zoom)
+            self.zoom = old_zoom
 
-    def view_operation_names(self):
+    def view_operation_names(self, event):
         if self.check_show_names.isChecked():
             self.is_show_names = True
         else:
diff --git a/b_asic/GUI/port_button.py b/b_asic/GUI/port_button.py
index d9fd2b135d1b11c9677be8ee814d95fe01d8007a..af2e7ef6de2df343334305f0fce63cc313c574d2 100644
--- a/b_asic/GUI/port_button.py
+++ b/b_asic/GUI/port_button.py
@@ -20,7 +20,6 @@ class PortButton(QPushButton):
         menu.exec_(self.cursor().pos())
 
     def mousePressEvent(self, event):
-        
         if event.button() == Qt.LeftButton:
             self.clicked += 1
             if self.clicked == 1:
@@ -29,11 +28,11 @@ class PortButton(QPushButton):
                 self.window.pressed_ports.append(self)
             elif self.clicked == 2:
                 self.setStyleSheet("background-color: white")
-                self.pressed = False                
+                self.pressed = False
                 self.clicked = 0
                 self.window.pressed_ports.remove(self)
         super(PortButton, self).mousePressEvent(event)
-            
+
     def mouseReleaseEvent(self, event):
         super(PortButton, self).mouseReleaseEvent(event)