From: anishmangal2002 <anishmangal2...@gmail.com> 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. Signed-off-by: anishmangal2002 <anishmangal2...@gmail.com> --- button.py | 10 ++-- model.py | 2 + p5_button.py | 30 +++++----- ui.py | 199 +++++++++++++++++++++++++++++++--------------------------- 4 files changed, 129 insertions(+), 112 deletions(-) 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 b7f592b..e24752e 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 d89b819..e723f66 100644 --- a/ui.py +++ b/ui.py @@ -92,7 +92,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 @@ -335,7 +335,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) @@ -369,7 +369,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) @@ -461,9 +460,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() @@ -471,9 +472,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() @@ -492,6 +495,7 @@ class UI: def _visibleNotifyCb( self, widget, event ): + logging.debug("_visibleNotifyCb") if (self.LAUNCHING): return @@ -525,6 +529,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) @@ -597,30 +626,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 @@ -637,18 +642,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 @@ -680,6 +673,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): @@ -875,18 +869,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): @@ -1003,6 +997,7 @@ class UI: self.doMouseListener( True ) self.showLiveVideoTags() self.LAST_MODE = -1 #force an update + self.updateVideoComponents() self.resetWidgetFadeTimer() @@ -1010,7 +1005,8 @@ class UI: def startLiveVideo(self, force): #We need to know which window and which pipe here - #if returning from another activity, active won't be false and needs to be to get started + #if returning from another activity, active won't be false + #and needs to be to get started if (self.ca.glive.window == self.liveVideoWindow and self.ca.props.active and not force): @@ -1025,14 +1021,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] ) @@ -1175,12 +1163,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 ): @@ -1253,16 +1241,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 ): @@ -1316,6 +1304,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 @@ -1455,15 +1444,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 @@ -1548,16 +1564,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() @@ -1567,8 +1583,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 ): @@ -1659,7 +1675,6 @@ class UI: if (self.RECD_INFO_ON): self.bottomCenter.add( self.namePanel ) self.bottomCenter.show_all() - self.resetWidgetFadeTimer() @@ -1913,22 +1928,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) @@ -2067,11 +2082,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): @@ -2108,11 +2123,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): @@ -2170,7 +2185,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) @@ -2264,10 +2279,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( "<b><span foreground='black'>SPACE</span></b>") -- 1.7.0.4 _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel