def update_overlay(self, message): #TODO Tracking is broken: remove all data stored for old action # Ultimately it would be great to have current_overlays working... self.current_overlays.clear() try: overlays = self.overlays[self.action_set][message.action] except KeyError: self.log.warning( 'No color overlay defined for action set `%s` and action `%s`. ' 'Consider using `null` overlays for this action.', self.action_set, message.action) return for (z_order, overlay_name, from_color, to_color) in overlays: if not self.current_overlays[z_order]: self.add_overlay(overlay_name, z_order) fife_from = fife.Color(*from_color) try: fife_to = fife.Color(*to_color) except (TypeError, NotImplementedError): color_attribute, alpha = to_color color = attrgetter(color_attribute)(self.instance) if isinstance(color, UtilColor) or isinstance( color, fife.Color): fife_to = fife.Color(color.r, color.g, color.b, alpha) else: raise TypeError( 'Unknown color `{}` as attribute `{}`: ' 'Expected either fife.Color or horizons.util.Color.'. format(color, to_color)) self.change_color(z_order, fife_from, fife_to)
def __set__(self, obj, color): if isinstance(color, tuple): color = fife.Color(*color) else: # Force a copy to get value semantics color = fife.Color(color.r, color.g, color.b, color.a) self._getSetter(obj)(color)
def createColorOverlay(self): # create color overlay for skels delay = 200 for rotation in range(0, 360, 45): anim = self._animationmanager.create("skel_stand_overlay" + str(rotation)) for frame in range(4): resource = ("overlay_stand_" + str(rotation) + "_" + str(frame) + ".png") anim.addFrame(self._imagemanager.get(resource), delay) overlay = fife.OverlayColors(anim) # skel 1 overlay.changeColor(fife.Color(255,0,0), fife.Color(255,0,0,80)) overlay.changeColor(fife.Color(0,0,255), fife.Color(0,0,255,80)) self._skel1.addColorOverlay("stand", rotation, overlay) # skel 2 overlay.changeColor(fife.Color(255,0,0), fife.Color(0,255,0,128)) overlay.changeColor(fife.Color(0,0,255), fife.Color(0,255,0,128)) self._skel2.addColorOverlay("stand", rotation, overlay)
def getToolbarAreaAt(self, x, y, mark=False): if self.dockareamarker is None: self.dockareamarker = pychan.widgets.Container() self.dockareamarker.base_color = fife.Color(200, 0, 0, 100) if mark is False: self.dockareamarker.hide() # Mouse wasn't over any dockwidgets. See if it is near any edge of the screen instead if x <= self._toolbarareas["left"].getAbsolutePos()[0]+10: if mark: self.dockareamarker.position = self._toolbarareas["left"].getAbsolutePos() self.dockareamarker.size = (10, self._toolbarareas["left"].height) self.dockareamarker.show() return DOCKAREA["left"] elif x >= self._toolbarareas["right"].getAbsolutePos()[0]-10: if mark: self.dockareamarker.position = self._toolbarareas["right"].getAbsolutePos() self.dockareamarker.size = (10, self._toolbarareas["right"].height) self.dockareamarker.x -= 10 self.dockareamarker.show() return DOCKAREA["right"] elif y <= self._toolbarareas["top"].getAbsolutePos()[1]+10: if mark: self.dockareamarker.position = self._toolbarareas["top"].getAbsolutePos() self.dockareamarker.size = (self._toolbarareas["top"].width, 10) self.dockareamarker.show() return DOCKAREA["top"] elif y >= self._toolbarareas["bottom"].getAbsolutePos()[1]-10: if mark: self.dockareamarker.position = self._toolbarareas["bottom"].getAbsolutePos() self.dockareamarker.y -= 10 self.dockareamarker.size = (self._toolbarareas["bottom"].width, 10) self.dockareamarker.show() return DOCKAREA["bottom"] if mark is True: self.dockareamarker.hide() return None
# GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # ################################################### from fife import fife STYLES= { 'default': { 'default' : { 'border_size': 2, 'margins': (0, 0), 'base_color' : fife.Color(40, 40, 40, 0), 'foreground_color' : fife.Color(255, 255, 255), 'background_color' : fife.Color(40, 40, 40, 255), 'selection_color' : fife.Color(80, 80, 80, 255), 'font' : 'libertine_14_black', }, 'Button' : { 'border_size': 1, 'margins' : (10, 5), }, ('Icon', 'ImageButton') : { 'border_size': 0 }, ('CheckBox','DropDown') : { 'selection_color' : fife.Color(255,255,255,200), 'background_color' : fife.Color(255,255,255,128),
def createStaticColorOverlays(self): img = self._imagemanager.load( "data/tilesets/toilett_singecolor_overlay.png") overlay = fife.OverlayColors(img) overlay.changeColor(fife.Color(255, 255, 255), fife.Color(0, 0, 255, 128)) for n in (1, 5, 9): instance = self._actorlayer.getInstance("toilett%s" % n) instance.addStaticColorOverlay(0, overlay) img = self._imagemanager.load( "data/tilesets/toilett_multicolor_overlay.png") overlay = fife.OverlayColors(img) overlay.changeColor(fife.Color(255, 0, 0), fife.Color(255, 0, 0, 80)) overlay.changeColor(fife.Color(0, 255, 0), fife.Color(0, 255, 0, 80)) overlay.changeColor(fife.Color(0, 0, 255), fife.Color(0, 0, 255, 80)) for n in (2, 6, 10): instance = self._actorlayer.getInstance("toilett%s" % n) instance.addStaticColorOverlay(0, overlay) overlay.changeColor(fife.Color(255, 0, 0), fife.Color(255, 0, 0, 200)) overlay.changeColor(fife.Color(0, 255, 0), fife.Color(0, 255, 0, 200)) overlay.changeColor(fife.Color(0, 0, 255), fife.Color(0, 0, 255, 200)) for n in (3, 7, 11): instance = self._actorlayer.getInstance("toilett%s" % n) instance.addStaticColorOverlay(0, overlay)
from scripts.gui.action import Action from scripts.gui.panel import Panel from scripts.events import postMapShown from scripts.events import onObjectSelected from scripts.events import onObjectsImported # settings for gui _POSITION = (30, 200) _SIZE = (200, 500) _MAX_PREVIEW_SIZE = (120, 120) _MODE_TEXT = 0 _MODE_IMAGE = 1 _MODES = [_MODE_TEXT, _MODE_IMAGE] _COLOR_STEP = fife.Color(10, 10, 10) _MAX_PREVIEW_WRAPPER_SIZE = (140, 140) _DEFAULT_BASE_COLOR = internal.DEFAULT_STYLE['default']['base_color'] _DEFAULT_SELECTION_COLOR = internal.DEFAULT_STYLE['default']['selection_color'] # plugin default settings _PLUGIN_SETTINGS = { 'module': "ObjectSelectorSettings", 'items': { 'dockarea': 'right', 'docked': True, }, }
# Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### from fife import fife from fife.extensions import pychan from pychan_demo import PyChanExample STYLES= { 'new default': { 'default' : { 'border_size': 2, 'margins': (0,0), 'base_color' : fife.Color(128,128,128), 'foreground_color' : fife.Color(255,255,255), 'background_color' : fife.Color(55,55,55), 'font' : 'samanata_small' }, 'Button' : { 'border_size': 2, 'margins' : (20,5), 'min_size' : (100,20), 'font' : 'samanata_small' }, 'CheckBox' : { 'border_size': 0, 'background_color' : fife.Color(0,0,0,0), }, 'RadioButton' : {
def getDockAreaAt(self, x, y, mark=False): if self.dockareamarker is None: self.dockareamarker = pychan.widgets.Container() self.dockareamarker.base_color = fife.Color(200, 0, 0, 100) if mark is False: self.dockareamarker.hide() for key in DOCKAREA: side = DOCKAREA[key] dockarea = self._dockareas[side] #absX, absY = dockarea.getAbsolutePos() #if absX <= x and absY <= y \ # and absX+dockarea.width >= x and absX+dockarea.height >= y: # return side placeIn, placeBefore, placeAfter = dockarea.getDockLocation(x, y) if placeIn or placeBefore or placeAfter: if mark is True: if placeIn: self.dockareamarker.position = placeIn.getAbsolutePos() self.dockareamarker.size = placeIn.size elif placeBefore: self.dockareamarker.position = placeBefore.getAbsolutePos() if side == "left" or side == "right": self.dockareamarker.size = (placeBefore.width, 10) else: self.dockareamarker.size = (10, placeBefore.height) elif placeAfter: self.dockareamarker.position = placeAfter.getAbsolutePos() if side == "left" or side == "right": self.dockareamarker.size = (placeAfter.width, 10) self.dockareamarker.y += placeAfter.height-10 else: self.dockareamarker.size = (10, placeAfter.height) self.dockareamarker.x += placeAfter.width-10 self.dockareamarker.show() return side # Mouse wasn't over any dockwidgets. See if it is near any edge of the screen instead if x <= self._dockareas["left"].getAbsolutePos()[0]+10: if mark: self.dockareamarker.position = self._dockareas["left"].getAbsolutePos() self.dockareamarker.size = (10, self._dockareas["left"].height) self.dockareamarker.show() return DOCKAREA["left"] elif x >= self._dockareas["right"].getAbsolutePos()[0]-10: if mark: self.dockareamarker.position = self._dockareas["right"].getAbsolutePos() self.dockareamarker.size = (10, self._dockareas["right"].height) self.dockareamarker.x -= 10 self.dockareamarker.show() return DOCKAREA["right"] elif y <= self._dockareas["top"].getAbsolutePos()[1]+10: if mark: self.dockareamarker.position = self._dockareas["top"].getAbsolutePos() self.dockareamarker.size = (self._dockareas["top"].width, 10) self.dockareamarker.show() return DOCKAREA["top"] elif y >= self._dockareas["bottom"].getAbsolutePos()[1]-10: if mark: self.dockareamarker.position = self._dockareas["bottom"].getAbsolutePos() self.dockareamarker.y -= 10 self.dockareamarker.size = (self._dockareas["bottom"].width, 10) self.dockareamarker.show() return DOCKAREA["bottom"] if mark is True: self.dockareamarker.hide() return None
def getDockAreaAt(self, x, y, mark=False): """ returns the dock area at the given cursor coordinates (if possible) also used for highlighting the dock area (this method is used on drag mouse events of a B{Panel} widget) @type x: int @param x: cursor x coordinates @type y: int @param y: cursor y coordinates @type mark: bool @param mark: flag to wether show the dock area marker (red area indicator) or not @rtype side: str @return side: dockarea id (e.g. 'right', 'left' ...) """ side = None if self.dockareamarker is None: self.dockareamarker = pychan.widgets.Container() self.dockareamarker.base_color = fife.Color(200, 0, 0, 100) if mark is False: self.dockareamarker.hide() for key in DOCKAREA: side = DOCKAREA[key] dockarea = self._dockareas[side] #absX, absY = dockarea.getAbsolutePos() #if absX <= x and absY <= y \ # and absX+dockarea.width >= x and absX+dockarea.height >= y: # return side placeIn, placeBefore, placeAfter = dockarea.getDockLocation(x, y) if placeIn or placeBefore or placeAfter: if mark is True: if placeIn: self.dockareamarker.position = placeIn.getAbsolutePos() self.dockareamarker.size = placeIn.size elif placeBefore: self.dockareamarker.position = placeBefore.getAbsolutePos() if side == "left" or side == "right": self.dockareamarker.size = (placeBefore.width, 10) else: self.dockareamarker.size = (10, placeBefore.height) elif placeAfter: self.dockareamarker.position = placeAfter.getAbsolutePos() if side == "left" or side == "right": self.dockareamarker.size = (placeAfter.width, 10) self.dockareamarker.y += placeAfter.height-10 else: self.dockareamarker.size = (10, placeAfter.height) self.dockareamarker.x += placeAfter.width-10 self.dockareamarker.show() return side # reset side, next attempt to find a new home side = None # Mouse wasn't over any dockwidgets. See if it is near any edge of the screen instead if x <= self._dockareas["left"].getAbsolutePos()[0]+10: if mark: self.dockareamarker.position = self._dockareas["left"].getAbsolutePos() self.dockareamarker.size = (10, self._dockareas["left"].height) self.dockareamarker.show() side = DOCKAREA["left"] return side elif x >= self._dockareas["right"].getAbsolutePos()[0]-10: if mark: self.dockareamarker.position = self._dockareas["right"].getAbsolutePos() self.dockareamarker.size = (10, self._dockareas["right"].height) self.dockareamarker.x -= 10 self.dockareamarker.show() side = DOCKAREA["right"] return side elif y <= self._dockareas["top"].getAbsolutePos()[1]+10: if mark: self.dockareamarker.position = self._dockareas["top"].getAbsolutePos() self.dockareamarker.size = (self._dockareas["top"].width, 10) self.dockareamarker.show() side = DOCKAREA["top"] return side elif y >= self._dockareas["bottom"].getAbsolutePos()[1]-10: if mark: self.dockareamarker.position = self._dockareas["bottom"].getAbsolutePos() self.dockareamarker.y -= 10 self.dockareamarker.size = (self._dockareas["bottom"].width, 10) self.dockareamarker.show() side = DOCKAREA["bottom"] return side if mark is True: self.dockareamarker.hide() return side
def __get__(self, obj, objtype=None): color = self._getGetter(obj)() return fife.Color(color.r, color.g, color.b, color.a)