From ddcc43b9303a3ca891aba817fce1fee5ffbb52a7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 20 Jan 2014 12:23:39 -0600 Subject: [PATCH] Made rating component size work a bit better. Send an onFileChanged(FILE_METADATA_CHANGED) when a game is launched to catch stat changes. Updated documentation. --- THEMES.md | 27 +++++++++++++++++++++++---- src/components/RatingComponent.cpp | 5 +++++ src/views/ViewController.cpp | 6 +++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/THEMES.md b/THEMES.md index ba4b7fea4..878e01574 100644 --- a/THEMES.md +++ b/THEMES.md @@ -299,8 +299,8 @@ Reference Common to almost all elements is a `pos` and `size` property of the NORMALIZED_PAIR type. They are normalized in terms of their "parent" object's size; 99% of the time, this is just the size of the screen. In this case, `0 0` would correspond to the top left corner, and `1 1` the bottom right corner (a positive Y value points further down). `pos` almost always refers to the top left corner of your element. You *can* use numbers outside of the [0..1] range if you want to place an element partially or completely off-screen. The order you define properties in does not matter. - Remember, you do *not* need to specify every property! +*Note that a view may choose to only make only certain properties on a particular element themable!* #### image @@ -308,10 +308,11 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + - If only one axis is specified (and the other is zero), the other will be automatically calculated in accordance with the image's aspect ratio. * `maxSize` - type: NORMALIZED_PAIR. - The image will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis (e.g. with a game's image metadata). * `origin` - type: NORMALIZED_PAIR. - - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. + - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `path` - type: PATH. - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). * `tile` - type: BOOLEAN. @@ -323,6 +324,7 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + - You should only set this if you want your text to behave like a "textbox" - that is, your text is multi-line and should wrap. * `text` - type: STRING. * `color` - type: COLOR. * `fontPath` - type: PATH. @@ -359,14 +361,31 @@ Can be created as an extra. EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +#### rating + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. + - Only one value is actually used. The other value should be zero. (e.g. specify width OR height, but not both. This is done to maintain the aspect ratio.) +* `filledPath` - type: PATH. + - Path to the "filled star" image. Image must be square (width equals height). +* `unfilledPath` - type: PATH. + - Path to the "unfilled star" image. Image must be square (width equals height). + +#### datetime + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. + - You should probably not set this. Leave it to `fontSize`. +* `color` - type: COLOR. +* `fontPath` - type: PATH. +* `fontSize` - type: FLOAT. + #### sound * `path` - type: PATH. - Path to the sound file. Only .wav files are currently supported. -*Note that a view may choose to only make only certain properties on a particular element themable!* - [*Check out the "official" themes for some more examples!*](http://aloshi.com/emulationstation#themes) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index f5aa705a9..a3f061fbb 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -34,6 +34,11 @@ std::string RatingComponent::getValue() const void RatingComponent::onSizeChanged() { + if(mSize.y() == 0) + mSize[1] = mSize.x() / 5.0f; + else if(mSize.x() == 0) + mSize[0] = mSize.y() * 5.0f; + updateVertices(); } diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index d0b4dc8af..9763ec034 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -69,10 +69,9 @@ void ViewController::playViewTransition() void ViewController::onFileChanged(FileData* file, FileChangeType change) { - for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) - { + auto it = mGameListViews.find(file->getSystem()); + if(it != mGameListViews.end()) it->second->onFileChanged(file, change); - } } void ViewController::launch(FileData* game, Eigen::Vector3f center) @@ -95,6 +94,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) mCamera = origCamera; mLockInput = false; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), nullptr, true); + this->onFileChanged(game, FILE_METADATA_CHANGED); }); }