From 4863eb5e637cb145077ebfd750c047bced8b90b2 Mon Sep 17 00:00:00 2001 From: anishmangal2002 Date: Sat, 24 Jul 2010 18:10:42 +0000 Subject: Fixes to the Record UI How the existing UI works: The record UI consists of many windows/widgets. In a particular mode or view, it displays and resizes the widgets appropriate for that view and tries to hide the other windows by moving them off-screen. Now, on sugar-0.88 (and probably on versions 0.86>), while trying to move the widgets off-screen, they actually get dumped at the bottom-right corner. Hence, if a user runs the existing Record activity on 0.88, he will observe that the bottom right quadrant of the screen is 'corrupted'. Fix description: The patch works by hiding or resizing (to size 1px by 1px) the widgets not required in a particular view/mode. The updateVideoComponents method has been modified to hide the widgets not required in a particular view. Widgets that can't be hidden are resized to 1 x 1 pixel. Additionally, this patch also fixes the naming of some variables (s/butt/button/g). Tested successfully on sugar-emulator-0.88, soas-mirabelle and xo1-f11-0.88. --- diff --git a/button.py b/button.py index 14b9700..2b0e85c 100644 --- a/button.py +++ b/button.py @@ -62,12 +62,12 @@ class RecdButton(TrayButton, gobject.GObject): return img - def setButtClickedId( self, id ): - self.BUTT_CLICKED_ID = id + def setButtonClickedId( self, id ): + self.BUTTON_CLICKED_ID = id - def getButtClickedId( self ): - return self.BUTT_CLICKED_ID + def getButtonClickedId( self ): + return self.BUTTON_CLICKED_ID def setup_rollover_options( self, info ): @@ -105,4 +105,4 @@ class RecdButton(TrayButton, gobject.GObject): def _itemCopyToClipboardCb(self, widget): - self.ui.copyToClipboard( self.recd ) \ No newline at end of file + self.ui.copyToClipboard( self.recd ) diff --git a/model.py b/model.py index 9d397b2..5b77e75 100644 --- a/model.py +++ b/model.py @@ -323,6 +323,8 @@ class Model: def startTakingPhoto( self ): self.setUpdating( True ) self.ca.glive.takePhoto() + self.ca.ui.FULLSCREEN = False + self.ca.ui.updateVideoComponents() def savePhoto( self, pixbuf ): diff --git a/p5_button.py b/p5_button.py index cf76a34..a8e10c5 100644 --- a/p5_button.py +++ b/p5_button.py @@ -25,7 +25,7 @@ class P5Button(P5): def __init__(self): P5.__init__(self) self.noloop() - self._butts = [] + self._buttons = [] self._buttonPressed = False @@ -34,10 +34,10 @@ class P5Button(P5): #iterate through the buttons to see if you've pressed any down bp = False - for i in range ( 0, len(self._butts) ): - if (self._butts[i]._enabled): - contains = self._butts[i].contains(event.x, event.y) - self._butts[i]._pressed = contains + for i in range ( 0, len(self._buttons) ): + if (self._buttons[i]._enabled): + contains = self._buttons[i].contains(event.x, event.y) + self._buttons[i]._pressed = contains if (contains): bp = True @@ -51,16 +51,16 @@ class P5Button(P5): pressed = [] #iterate through the buttons to see if you've released on any - for i in range ( 0, len(self._butts) ): - if (self._butts[i]._enabled): - if (self._butts[i]._pressed): - if (self._butts[i].contains(event.x, event.y)): - pressed.append( self._butts[i] ) - - if (self._butts[i]._toggle): - self._butts[i]._pressed = not self._butts[i]._pressed + for i in range ( 0, len(self._buttons) ): + if (self._buttons[i]._enabled): + if (self._buttons[i]._pressed): + if (self._buttons[i].contains(event.x, event.y)): + pressed.append( self._buttons[i] ) + + if (self._buttons[i]._toggle): + self._buttons[i]._pressed = not self._buttons[i]._pressed else: - self._butts[i]._pressed = False + self._buttons[i]._pressed = False for i in range( 0, len(pressed) ): pressed[i].doPressed() @@ -170,4 +170,4 @@ class Button: def isImg( self ): - return self._img != None \ No newline at end of file + return self._img != None diff --git a/ui.py b/ui.py index 21e27be..2bacd05 100644 --- a/ui.py +++ b/ui.py @@ -93,7 +93,7 @@ class UI: self.maxw = 49 self.maxh = 49 self.controlBarHt = 60 - self.recordButtWd = 55 + self.recordButtonWd = 55 self.pipw = self.__class__.dim_PIPW self.piph = self.__class__.dim_PIPH @@ -336,7 +336,7 @@ class UI: self.tagsBuffer = gtk.TextBuffer() self.tagsBuffer.connect('changed', self._tagsBufferEditedCb) self.tagsField = gtk.TextView(self.tagsBuffer) - self.tagsField.set_size_request( 100, 100 ) + self.tagsField.set_size_request( 50, 50 ) self.tagsPanel.pack_start(self.tagsField, expand=True) self.infoBoxTopLeft.pack_start(self.tagsPanel, expand=True) @@ -370,7 +370,6 @@ class UI: self.centered = True self.setUp() - def _mapEventCb( self, widget, event ): #when your parent window is ready, turn on the feed of live video self.liveVideoWindow.disconnect(self.MAP_EVENT_ID) @@ -462,9 +461,11 @@ class UI: self.slowLiveVideoWindow.connect("visibility-notify-event", self._visibleNotifyCb) self.recordWindow = RecordWindow(self) + self.recordWindow.set_geometry_hints(min_width=1, min_height=1) self.addToWindowStack( self.recordWindow, self.windowStack[len(self.windowStack)-1] ) self.progressWindow = ProgressWindow(self) + self.progressWindow.set_geometry_hints(min_width=1, min_height=1) self.addToWindowStack( self.progressWindow, self.windowStack[len(self.windowStack)-1] ) self.maxWindow = gtk.Window() @@ -472,9 +473,11 @@ class UI: self.maxWindow.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorBlack.gColor ) maxButton = MaxButton(self) self.maxWindow.add( maxButton ) + self.maxWindow.set_geometry_hints(min_width=1, min_height=1) self.addToWindowStack( self.maxWindow, self.windowStack[len(self.windowStack)-1] ) self.scrubWindow = ScrubberWindow(self) + self.scrubWindow.set_geometry_hints(min_width=1, min_height=1) self.addToWindowStack( self.scrubWindow, self.windowStack[len(self.windowStack)-1] ) self.infWindow = gtk.Window() @@ -493,6 +496,7 @@ class UI: def _visibleNotifyCb( self, widget, event ): + logging.debug("_visibleNotifyCb") if (self.LAUNCHING): return @@ -526,6 +530,31 @@ class UI: else: self.ca.stopPipes() + def resizeWindows( self ): + if self.ca.m.MODE == Constants.MODE_AUDIO: + self.maxWindow.resize( 1, 1 ) + else: + maxDim = self.getMaxDim( self.FULLSCREEN ) + self.maxWindow.resize( maxDim[0], maxDim[1] ) + + if self.LIVEMODE: + self.pipBgdWindow.resize( 1, 1 ) + self.playOggWindow.resize( 1, 1 ) + self.livePhotoWindow.resize( 1, 1 ) + self.slowLiveVideoWindow.resize( 1, 1 ) + self.infWindow.resize( 1, 1 ) + if self.ca.m.MODE == Constants.MODE_PHOTO: + self.progressWindow.resize( 1, 1 ) + else: + pgdDim = self.getPgdDim( self.FULLSCREEN ) + self.pipBgdWindow.resize( pgdDim[0], pgdDim[1] ) + self.progressWindow.resize( 1, 1 ) + self.recordWindow.resize( 1, 1 ) + if self.ca.m.MODE == Constants.MODE_PHOTO: + self.playOggWindow.resize( 1, 1 ) + self.scrubWindow.resize( 1, 1 ) + elif self.ca.m.MODE == Constants.MODE_VIDEO: + self.liveVideoWindow.resize( 1, 1 ) def setUpWindowsSizes( self ): pipDim = self.getPipDim(False) @@ -598,30 +627,6 @@ class UI: if (self.HIDE_WIDGET_TIMEOUT_ID != 0): gobject.source_remove( self.HIDE_WIDGET_TIMEOUT_ID ) - - def hideWidgets( self ): - self.moveWinOffscreen( self.maxWindow ) - self.moveWinOffscreen( self.pipBgdWindow ) - self.moveWinOffscreen( self.infWindow ) - self.moveWinOffscreen( self.slowLiveVideoWindow ) - - if (self.FULLSCREEN): - self.moveWinOffscreen( self.recordWindow ) - self.moveWinOffscreen( self.progressWindow ) - self.moveWinOffscreen( self.scrubWindow ) - - if (self.ca.m.MODE == Constants.MODE_PHOTO): - if (not self.LIVEMODE): - self.moveWinOffscreen( self.liveVideoWindow ) - elif (self.ca.m.MODE == Constants.MODE_VIDEO): - if (not self.LIVEMODE): - self.moveWinOffscreen( self.liveVideoWindow ) - elif (self.ca.m.MODE == Constants.MODE_AUDIO): - if (not self.LIVEMODE): - self.moveWinOffscreen( self.liveVideoWindow ) - self.LAST_MODE = -1 - - def _mouseMightaMovedCb( self ): x, y = self.ca.get_pointer() passedTime = 0 @@ -638,18 +643,6 @@ class UI: self.hideWidgetsTimer = time.time() passedTime = 0 - if (passedTime >= 3): - if (not self.hiddenWidgets): - if (self.mouseInWidget(x,y)): - self.hideWidgetsTimer = time.time() - elif (self.RECD_INFO_ON): - self.hideWidgetsTimer = time.time() - elif (self.UPDATE_TIMER_ID != 0): - self.hideWidgetsTimer = time.time() - else: - self.hideWidgets() - self.hiddenWidgets = True - self.mx = x self.my = y return True @@ -681,6 +674,7 @@ class UI: def _mediaClickedForPlayback(self, widget, event): + logging.debug("_mediaClickedForPlayback") if (not self.LIVEMODE): if (self.shownRecd != None): if (self.ca.m.MODE != Constants.MODE_PHOTO): @@ -876,18 +870,18 @@ class UI: kids = self.thumbTray.get_children() for i in range (0, len(kids)): if (self.ca.m.UPDATING or self.ca.m.RECORDING): - if (kids[i].getButtClickedId() != 0): - kids[i].disconnect( kids[i].getButtClickedId() ) - kids[i].setButtClickedId(0) + if (kids[i].getButtonClickedId() != 0): + kids[i].disconnect( kids[i].getButtonClickedId() ) + kids[i].setButtonClickedId(0) else: - if (kids[i].getButtClickedId() == 0): - BUTT_CLICKED_ID = kids[i].connect( "clicked", self._thumbClicked, kids[i].recd ) - kids[i].setButtClickedId(BUTT_CLICKED_ID) + if (kids[i].getButtonClickedId() == 0): + BUTTON_CLICKED_ID = kids[i].connect( "clicked", self._thumbClicked, kids[i].recd ) + kids[i].setButtonClickedId(BUTTON_CLICKED_ID) def hideAllWindows( self ): for i in range (0, len(self.windowStack)): - self.moveWinOffscreen( self.windowStack[i] ) + self.windowStack[i].hide_all() def _liveButtonReleaseCb(self, widget, event): @@ -1004,6 +998,7 @@ class UI: self.doMouseListener( True ) self.showLiveVideoTags() self.LAST_MODE = -1 #force an update + self.updateVideoComponents() self.resetWidgetFadeTimer() @@ -1017,14 +1012,6 @@ class UI: self.FULLSCREEN = not self.FULLSCREEN self.updateVideoComponents() - - def moveWinOffscreen( self, win ): - #we move offscreen to resize or else we get flashes on screen, and setting hide() doesn't allow resize & moves - offW = (gtk.gdk.screen_width() + 100) - offH = (gtk.gdk.screen_height() + 100) - self.smartMove(win, offW, offH) - - def setImgLocDim( self, win ): imgDim = self.getImgDim( self.FULLSCREEN ) self.smartResize( win, imgDim[0], imgDim[1] ) @@ -1167,12 +1154,12 @@ class UI: if (self.ca.m.MODE == Constants.MODE_PHOTO): return [self.vw, self.controlBarHt] else: - return [self.recordButtWd, self.controlBarHt] + return [self.recordButtonWd, self.controlBarHt] else: if (self.ca.m.MODE == Constants.MODE_PHOTO): return [gtk.gdk.screen_width()-(self.inset*2), self.controlBarHt] else: - return [self.recordButtWd, self.controlBarHt] + return [self.recordButtonWd, self.controlBarHt] def getInbLoc( self, full ): @@ -1245,16 +1232,16 @@ class UI: def getPrgDim( self, full ): if (not full): - return [self.vw-self.recordButtWd, self.controlBarHt] + return [self.vw-self.recordButtonWd, self.controlBarHt] else: - return [gtk.gdk.screen_width()-(self.inset+self.inset+self.recordButtWd), self.controlBarHt] + return [gtk.gdk.screen_width()-(self.inset+self.inset+self.recordButtonWd), self.controlBarHt] def getPrgLoc( self, full ): if (not full): - return [self.centerBoxPos[0]+self.recordButtWd, self.centerBoxPos[1]+self.vh] + return [self.centerBoxPos[0]+self.recordButtonWd, self.centerBoxPos[1]+self.vh] else: - return [self.inset+self.recordButtWd, gtk.gdk.screen_height()-(self.inset+self.controlBarHt)] + return [self.inset+self.recordButtonWd, gtk.gdk.screen_height()-(self.inset+self.controlBarHt)] def getLoc( self, pos, full ): @@ -1308,6 +1295,7 @@ class UI: else: #or, if there is no countdown, it might be because we are recording self.clickShutter() + self.progressWindow.updateProgress( 1, Constants.istrFinishedRecording ) else: #we're timing down something, but interrupted by user click or the timer completing @@ -1447,15 +1435,42 @@ class UI: elif (self.TRANSCODING): pos.append({"position":"tmr", "window":self.progressWindow} ) - for i in range (0, len(self.windowStack)): - self.windowStack[i].hide_all() - self.hideAllWindows() self.updatePos( pos ) + self.resizeWindows() for i in range (0, len(self.windowStack)): self.windowStack[i].show_all() + if self.ca.m.MODE == Constants.MODE_PHOTO: + if not self.LIVEMODE: + if self.RECD_INFO_ON == True: + self.maxWindow.hide_all() + if self.FULLSCREEN: + self.infWindow.hide_all() + else : + self.infWindow.hide_all() + self.scrubWindow.hide_all() + elif self.ca.m.MODE == Constants.MODE_VIDEO: + if not self.LIVEMODE: + if self.RECD_INFO_ON == True: + self.scrubWindow.hide_all() + self.maxWindow.hide_all() + if self.FULLSCREEN: + self.infWindow.hide_all() + else : + self.infWindow.hide_all() + self.scrubWindow.hide_all() + elif self.ca.m.MODE == Constants.MODE_AUDIO: + if not self.LIVEMODE: + if self.RECD_INFO_ON == True: + self.scrubWindow.hide_all() + if self.FULLSCREEN: + self.infWindow.hide_all() + else: + self.infWindow.hide_all() + self.scrubWindow.hide_all() + self.LAST_MODE = self.ca.m.MODE self.LAST_FULLSCREEN = self.FULLSCREEN self.LAST_LIVE = self.LIVEMODE @@ -1540,16 +1555,16 @@ class UI: if (kids[i].recd == recd): self.thumbTray.remove_item(kids[i]) kids[i].cleanUp() - kids[i].disconnect( kids[i].getButtClickedId() ) - kids[i].setButtClickedId(0) + kids[i].disconnect( kids[i].getButtonClickedId() ) + kids[i].setButtonClickedId(0) def addThumb( self, recd, forceScroll ): - butt = RecdButton( self, recd ) - BUTT_CLICKED_ID = butt.connect( "clicked", self._thumbClicked, recd ) - butt.setButtClickedId(BUTT_CLICKED_ID) - self.thumbTray.add_item( butt, len(self.thumbTray.get_children()) ) - butt.show() + button = RecdButton( self, recd ) + BUTTON_CLICKED_ID = button.connect( "clicked", self._thumbClicked, recd ) + button.setButtonClickedId(BUTTON_CLICKED_ID) + self.thumbTray.add_item( button, len(self.thumbTray.get_children()) ) + button.show() if (forceScroll): self.thumbTray.scroll_to_end() @@ -1559,8 +1574,8 @@ class UI: for i in range (0, len(kids)): self.thumbTray.remove_item(kids[i]) kids[i].cleanUp() - if (kids[i].getButtClickedId() != 0): - kids[i].disconnect( kids[i].getButtClickedId() ) + if (kids[i].getButtonClickedId() != 0): + kids[i].disconnect( kids[i].getButtonClickedId() ) def _thumbClicked( self, button, recd ): @@ -1651,7 +1666,6 @@ class UI: if (self.RECD_INFO_ON): self.bottomCenter.add( self.namePanel ) self.bottomCenter.show_all() - self.resetWidgetFadeTimer() @@ -1903,22 +1917,22 @@ class ScrubberWindow(gtk.Window): self.add( self.hbox ) self.button = gtk.Button() - buttBox = gtk.EventBox() - buttBox.add(self.button) - buttBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor ) + buttonBox = gtk.EventBox() + buttonBox.add(self.button) + buttonBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor ) self.button.set_image( Constants.recPlayImg ) self.button.set_property('can-default', True) self.button.set_relief(gtk.RELIEF_NONE) - self.button.set_size_request( self.ui.recordButtWd, self.ui.recordButtWd ) - buttBox.set_size_request( self.ui.recordButtWd, self.ui.recordButtWd ) + self.button.set_size_request( self.ui.recordButtonWd, self.ui.recordButtonWd ) + buttonBox.set_size_request( self.ui.recordButtonWd, self.ui.recordButtonWd ) #self.button.set_border_width( UI.dim_INSET/2 ) self.button.show() - buttBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor ) + buttonBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor ) self.button.modify_bg( gtk.STATE_ACTIVE, Constants.colorBlack.gColor ) self.button.connect('clicked', self._buttonClickedCb) - self.hbox.pack_start(buttBox, expand=False) + self.hbox.pack_start(buttonBox, expand=False) self.adjustment = gtk.Adjustment(0.0, 0.00, 100.0, 0.1, 1.0, 1.0) self.hscale = gtk.HScale(self.adjustment) @@ -2057,11 +2071,11 @@ class MaxButton(P5Button): xs.append(0) ys.append(self.ui.maxh) poly = Polygon( xs, ys ) - butt = Button( poly, 0, 0) - butt.addActionListener( self ) + button = Button( poly, 0, 0) + button.addActionListener( self ) self.maxS = "max" - butt.setActionCommand( self.maxS ) - self._butts.append( butt ) + button.setActionCommand( self.maxS ) + self._buttons.append( button ) def draw(self, ctx, w, h): @@ -2098,11 +2112,11 @@ class InfButton(P5Button): xs.append(0) ys.append(75) poly = Polygon( xs, ys ) - butt = Button( poly, 0, 0) - butt.addActionListener( self ) + button = Button( poly, 0, 0) + button.addActionListener( self ) self.infS = "inf" - butt.setActionCommand( self.infS ) - self._butts.append( butt ) + button.setActionCommand( self.infS ) + self._buttons.append( button ) def draw(self, ctx, w, h): @@ -2160,7 +2174,7 @@ class RecordWindow(gtk.Window): self.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor ) self.shutterButton = RecordButton() - self.shutterButton.set_size_request(self.ui.recordButtWd, self.ui.recordButtWd) + self.shutterButton.set_size_request(self.ui.recordButtonWd, self.ui.recordButtonWd) self.shutterButton.set_relief(gtk.RELIEF_NONE) self.shutterButton.set_image( Constants.recImg ) self.shutterButton.connect("clicked", self.ui._shutterClickCb) @@ -2254,10 +2268,10 @@ class ProgressWindow(gtk.Window): self.progBar.modify_bg( gtk.STATE_PRELIGHT, Constants.colorBlack.gColor ) self.progBar.modify_bg( gtk.STATE_SELECTED, Constants.colorBlack.gColor ) self.progBar.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorBlack.gColor ) - vb.add( self.progBar ) + vb.pack_start( self.progBar, True, True, 0 ) hbox = gtk.HBox() - vb.add( hbox ) + vb.pack_start( hbox, True, True, 0 ) self.infoLabel = gtk.Label() self.infoLabel.set_alignment( 1, .5 ) self.infoLabel.set_text( "SPACE") -- cgit v0.9.1