Update to 20160106 OS X Preview for Developers release.

byuu says:

New update. Most of the work today went into eliminating hiro::Image
from all objects in all ports, replacing with nall::image. That took an
eternity.

Changelog:
- fixed crashing bug when loading games [thanks endrift!!]
- toggling "show status bar" option adjusts window geometry (not
  supposed to recenter the window, though)
- button sizes improved; icon-only button icons no longer being cut off
This commit is contained in:
Tim Allen 2016-01-07 19:14:33 +11:00
parent 4d193d7d94
commit 0b923489dd
308 changed files with 699 additions and 1326 deletions

View File

@ -1,5 +1,5 @@
AdvancedSettings::AdvancedSettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Action::Settings);
setIcon(Icon::Action::Settings);
setText("Advanced");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
AudioSettings::AudioSettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Device::Speaker);
setIcon(Icon::Device::Speaker);
setText("Audio");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
HotkeySettings::HotkeySettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Device::Keyboard);
setIcon(Icon::Device::Keyboard);
setText("Hotkeys");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
InputSettings::InputSettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Device::Joypad);
setIcon(Icon::Device::Joypad);
setText("Input");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
TimingSettings::TimingSettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Device::Clock);
setIcon(Icon::Device::Clock);
setText("Timing");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
VideoSettings::VideoSettings(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Device::Display);
setIcon(Icon::Device::Display);
setText("Video");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
CheatEditor::CheatEditor(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Edit::Replace);
setIcon(Icon::Edit::Replace);
setText("Cheat Editor");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
ManifestViewer::ManifestViewer(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Emblem::Text);
setIcon(Icon::Emblem::Text);
setText("Manifest Viewer");
layout.setMargin(5);

View File

@ -1,5 +1,5 @@
StateManager::StateManager(TabFrame* parent) : TabFrameItem(parent) {
setImage(Icon::Application::FileManager);
setIcon(Icon::Application::FileManager);
setText("State Manager");
layout.setMargin(5);

View File

@ -24,7 +24,7 @@ auto pMenuItem::construct() -> void {
cocoaAction = cocoaMenuItem = [[CocoaMenuItem alloc] initWith:self()];
pAction::construct();
setImage(state().image);
setIcon(state().icon);
setText(state().text);
}
}
@ -35,10 +35,10 @@ auto pMenuItem::destruct() -> void {
}
}
auto pMenuItem::setImage(const Image& image) -> void {
auto pMenuItem::setIcon(const image& icon) -> void {
@autoreleasepool {
uint size = 15; //there is no API to retrieve the optimal size
[cocoaAction setImage:NSMakeImage(image, size, size)];
[cocoaAction setImage:NSMakeImage(icon, size, size)];
}
}

View File

@ -13,7 +13,7 @@ namespace hiro {
struct pMenuItem : pAction {
Declare(MenuItem, Action)
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
CocoaMenuItem* cocoaMenuItem = nullptr;

View File

@ -25,7 +25,7 @@ auto pMenu::construct() -> void {
cocoaAction = cocoaMenu = [[CocoaMenu alloc] initWith:self()];
pAction::construct();
setImage(state().image);
setIcon(state().icon);
setText(state().text);
}
}
@ -53,10 +53,10 @@ auto pMenu::remove(sAction action) -> void {
}
}
auto pMenu::setImage(const Image& image) -> void {
auto pMenu::setIcon(const image& icon) -> void {
@autoreleasepool {
uint size = 15; //there is no API to retrieve the optimal size
[cocoaAction setImage:NSMakeImage(image, size, size)];
[cocoaAction setImage:NSMakeImage(icon, size, size)];
}
}

View File

@ -16,7 +16,7 @@ struct pMenu : pAction {
auto append(sAction action) -> void;
auto remove(sAction action) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
CocoaMenu* cocoaMenu = nullptr;

View File

@ -36,6 +36,7 @@ auto pStatusBar::setVisible(bool visible) -> void {
@autoreleasepool {
if(auto parent = _parent()) {
[[parent->cocoaWindow statusBar] setHidden:!visible];
parent->setGeometry(parent->state().geometry);
}
}
}

View File

@ -2,40 +2,25 @@ auto NSMakeColor(const hiro::Color& color) -> NSColor* {
return [NSColor colorWithRed:(color.red() / 255.0) green:(color.green() / 255.0) blue:(color.blue() / 255.0) alpha:(color.alpha() / 255.0)];
}
auto NSMakeImage(hiro::Image image, uint scaleWidth = 0, uint scaleHeight = 0) -> NSImage* {
if(!image.state.data) return nil;
auto NSMakeImage(image icon, uint scaleWidth = 0, uint scaleHeight = 0) -> NSImage* {
if(!icon) return nil;
//convert ARGB8888 to ABGR8888
auto p = image.data();
for(auto n : range(image.width() * image.height())) {
uint32 color = *p;
color = (color & 0xff00ff00) | ((color & 0xff0000) >> 16) | ((color & 0x0000ff) << 16);
*p++ = color;
}
if(scaleWidth && scaleHeight) icon.scale(scaleWidth, scaleHeight);
icon.transform(0, 32, 255u << 24, 255u << 0, 255u << 8, 255u << 16); //Cocoa stores images in ABGR format
//create NSImage from memory
NSImage* cocoaImage = [[[NSImage alloc] initWithSize:NSMakeSize(image.width(), image.height())] autorelease];
NSImage* cocoaImage = [[[NSImage alloc] initWithSize:NSMakeSize(icon.width(), icon.height())] autorelease];
NSBitmapImageRep* bitmap = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:nil
pixelsWide:image.width() pixelsHigh:image.height()
pixelsWide:icon.width() pixelsHigh:icon.height()
bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES
isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace
bitmapFormat:NSAlphaNonpremultipliedBitmapFormat
bytesPerRow:4*image.width() bitsPerPixel:32
bytesPerRow:(4 * icon.width()) bitsPerPixel:32
] autorelease];
memory::copy([bitmap bitmapData], image.data(), 4 * image.width() * image.height());
memory::copy([bitmap bitmapData], icon.data(), 4 * icon.width() * icon.height());
[cocoaImage addRepresentation:bitmap];
if(!scaleWidth || !scaleHeight) return cocoaImage;
//scale image
[cocoaImage setScalesWhenResized:YES];
NSImage* scaleImage = [[[NSImage alloc] initWithSize:NSMakeSize(scaleWidth, scaleHeight)] autorelease];
[scaleImage lockFocus];
[cocoaImage setSize:NSMakeSize(scaleWidth, scaleHeight)];
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
[cocoaImage drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, scaleWidth, scaleHeight) operation:NSCompositeCopy fraction:1.0];
[scaleImage unlockFocus];
return scaleImage;
return cocoaImage;
}
auto DropPathsOperation(id<NSDraggingInfo> sender) -> NSDragOperation {

View File

@ -27,7 +27,7 @@ auto pButton::construct() -> void {
pWidget::construct();
setBordered(state().bordered);
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
}
@ -35,6 +35,7 @@ auto pButton::construct() -> void {
auto pButton::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
@ -43,16 +44,16 @@ auto pButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + (state().text ? 20 : 4), size.height() + 4};
return {size.width() + (state().text ? 20 : 8), size.height() + 8};
}
auto pButton::setBordered(bool bordered) -> void {
@ -65,14 +66,9 @@ auto pButton::setGeometry(Geometry geometry) -> void {
});
}
auto pButton::setImage(const Image& image) -> void {
auto pButton::setIcon(const image& icon) -> void {
@autoreleasepool {
if(!image) {
[cocoaView setImage:nil];
return;
}
[cocoaView setImage:NSMakeImage(image)];
[cocoaView setImage:NSMakeImage(icon)];
}
}

View File

@ -16,7 +16,7 @@ struct pButton : pWidget {
auto minimumSize() const -> Size override;
auto setBordered(bool bordered) -> void;
auto setGeometry(Geometry geometry) -> void override;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;

View File

@ -99,6 +99,7 @@ auto pCanvas::construct() -> void {
auto pCanvas::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
@ -146,7 +147,7 @@ auto pCanvas::setGeometry(Geometry geometry) -> void {
auto pCanvas::setGradient(Gradient gradient) -> void {
}
auto pCanvas::setImage(const Image& image) -> void {
auto pCanvas::setIcon(const image& icon) -> void {
}
auto pCanvas::update() -> void {

View File

@ -31,7 +31,7 @@ struct pCanvas : pWidget {
auto setDroppable(bool droppable) -> void;
auto setGeometry(Geometry geometry) -> void override;
auto setGradient(Gradient gradient) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto update() -> void;
auto _rasterize() -> void;

View File

@ -30,7 +30,7 @@ auto pCheckButton::construct() -> void {
setBordered(state().bordered);
setChecked(state().checked);
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
}
@ -38,6 +38,7 @@ auto pCheckButton::construct() -> void {
auto pCheckButton::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
@ -46,16 +47,16 @@ auto pCheckButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + 20, size.height() + 4};
return {size.width() + (state().text ? 20 : 8), size.height() + 8};
}
auto pCheckButton::setBordered(bool bordered) -> void {
@ -74,14 +75,9 @@ auto pCheckButton::setGeometry(Geometry geometry) -> void {
});
}
auto pCheckButton::setImage(const Image& image) -> void {
auto pCheckButton::setIcon(const image& icon) -> void {
@autoreleasepool {
if(!image) {
[cocoaView setImage:nil];
return;
}
[cocoaView setImage:NSMakeImage(image)];
[cocoaView setImage:NSMakeImage(icon)];
}
}

View File

@ -17,7 +17,7 @@ struct pCheckButton : pWidget {
auto setBordered(bool bordered) -> void;
auto setChecked(bool checked) -> void;
auto setGeometry(Geometry geometry) -> void override;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;

View File

@ -34,6 +34,7 @@ auto pCheckLabel::construct() -> void {
auto pCheckLabel::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -8,7 +8,7 @@ auto pComboButtonItem::construct() -> void {
auto pComboButtonItem::destruct() -> void {
}
auto pComboButtonItem::setImage(const Image& icon) -> void {
auto pComboButtonItem::setIcon(const image& icon) -> void {
}
auto pComboButtonItem::setSelected() -> void {

View File

@ -5,7 +5,7 @@ namespace hiro {
struct pComboButtonItem : pObject {
Declare(ComboButtonItem, Object)
auto setImage(const Image& icon) -> void;
auto setIcon(const image& icon) -> void;
auto setSelected() -> void;
auto setText(const string& text) -> void;

View File

@ -30,6 +30,7 @@ auto pComboButton::construct() -> void {
auto pComboButton::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -36,6 +36,7 @@ void pConsole::constructor() {
void pConsole::destructor() {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -26,6 +26,7 @@ auto pFrame::construct() -> void {
auto pFrame::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -42,6 +42,7 @@ void pHexEdit::constructor() {
void pHexEdit::destructor() {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -66,6 +66,7 @@ auto pHorizontalScrollBar::construct() -> void {
auto pHorizontalScrollBar::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -34,6 +34,7 @@ auto pHorizontalSlider::construct() -> void {
auto pHorizontalSlider::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -29,6 +29,7 @@ auto pLabel::construct() -> void {
auto pLabel::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -42,6 +42,7 @@ auto pLineEdit::construct() -> void {
auto pLineEdit::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -23,7 +23,7 @@ auto pListViewCell::setChecked(bool checked) -> void {
auto pListViewCell::setForegroundColor(Color color) -> void {
}
auto pListViewCell::setImage(const Image& image) -> void {
auto pListViewCell::setIcon(const image& icon) -> void {
}
auto pListViewCell::setText(const string& text) -> void {

View File

@ -10,7 +10,7 @@ struct pListViewCell : pObject {
auto setCheckable(bool checkable) -> void;
auto setChecked(bool checked) -> void;
auto setForegroundColor(Color color) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
auto _grandparent() -> maybe<pListView&>;

View File

@ -42,7 +42,7 @@ auto pListViewColumn::setForegroundColor(Color color) -> void {
auto pListViewColumn::setHorizontalAlignment(double alignment) -> void {
}
auto pListViewColumn::setImage(const Image& image) -> void {
auto pListViewColumn::setIcon(const image& icon) -> void {
}
auto pListViewColumn::setResizable(bool resizable) -> void {

View File

@ -13,7 +13,7 @@ struct pListViewColumn : pObject {
auto setFont(const Font& font) -> void override;
auto setForegroundColor(Color color) -> void;
auto setHorizontalAlignment(double) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setResizable(bool resizable) -> void;
auto setSortable(bool sortable) -> void;
auto setText(const string& text) -> void;

View File

@ -177,8 +177,8 @@
frame.size.width -= frame.size.height + 2;
}
if(listViewCell->state.image) {
NSImage* image = NSMakeImage(listViewCell->state.image, frame.size.height, frame.size.height);
if(listViewCell->state.icon) {
NSImage* image = NSMakeImage(listViewCell->state.icon, frame.size.height, frame.size.height);
[[NSGraphicsContext currentContext] saveGraphicsState];
NSRect targetRect = NSMakeRect(frame.origin.x, frame.origin.y, frame.size.height, frame.size.height);
NSRect sourceRect = NSMakeRect(0, 0, [image size].width, [image size].height);
@ -269,6 +269,7 @@ auto pListView::construct() -> void {
auto pListView::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
@ -361,8 +362,8 @@ auto pListView::_cellWidth(uint row, uint column) -> uint {
if(pListViewCell->state.checkable) {
width += 24;
}
if(auto& image = pListViewCell->state.image) {
width += image.width() + 2;
if(auto& icon = pListViewCell->state.icon) {
width += icon.width() + 2;
}
if(auto& text = pListViewCell->state.text) {
width += pFont::size(pListViewCell->font(true), text).width();
@ -376,8 +377,8 @@ auto pListView::_columnWidth(uint column) -> uint {
uint width = 8;
if(auto& header = state().header) {
if(auto pListViewColumn = header->column(column)) {
if(auto& image = pListViewColumn->state.image) {
width += image.width() + 2;
if(auto& icon = pListViewColumn->state.icon) {
width += icon.width() + 2;
}
if(auto& text = pListViewColumn->state.text) {
width += pFont::size(pListViewColumn->font(true), text).width();

View File

@ -28,6 +28,7 @@ auto pProgressBar::construct() -> void {
auto pProgressBar::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -31,7 +31,7 @@ auto pRadioButton::construct() -> void {
setBordered(state().bordered);
if(state().checked) setChecked();
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
}
@ -39,6 +39,7 @@ auto pRadioButton::construct() -> void {
auto pRadioButton::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
@ -47,16 +48,16 @@ auto pRadioButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + 20, size.height() + 4};
return {size.width() + (state().text ? 20 : 8), size.height() + 8};
}
auto pRadioButton::setBordered(bool bordered) -> void {
@ -89,14 +90,9 @@ auto pRadioButton::setGeometry(Geometry geometry) -> void {
auto pRadioButton::setGroup(sGroup group) -> void {
}
auto pRadioButton::setImage(const Image& image) -> void {
auto pRadioButton::setIcon(const image& icon) -> void {
@autoreleasepool {
if(!image) {
[cocoaView setImage:nil];
return;
}
[cocoaView setImage:NSMakeImage(image)];
[cocoaView setImage:NSMakeImage(icon)];
}
}

View File

@ -18,7 +18,7 @@ struct pRadioButton : pWidget {
auto setChecked() -> void;
auto setGeometry(Geometry geometry) -> void override;
auto setGroup(sGroup group) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;

View File

@ -34,6 +34,7 @@ auto pRadioLabel::construct() -> void {
auto pRadioLabel::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -17,7 +17,7 @@ auto pTabFrameItem::remove(sLayout layout) -> void {
auto pTabFrameItem::setClosable(bool closable) -> void {
}
auto pTabFrameItem::setImage(const Image& image) -> void {
auto pTabFrameItem::setIcon(const image& icon) -> void {
}
auto pTabFrameItem::setMovable(bool movable) -> void {

View File

@ -8,7 +8,7 @@ struct pTabFrameItem : pObject {
auto append(sLayout layout) -> void;
auto remove(sLayout layout) -> void;
auto setClosable(bool closable) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setMovable(bool movable) -> void;
auto setSelected() -> void;
auto setText(const string& text) -> void;

View File

@ -33,7 +33,7 @@
int selection = [cocoaTabFrame indexOfTabViewItem:self];
if(selection >= 0) {
if(auto item = tabFrame->item(selection)) {
if(item->state.image) {
if(item->state.icon) {
uint iconSize = hiro::pFont::size(tabFrame->font(true), " ").height();
sizeOfLabel.width += iconSize + 2;
}
@ -46,9 +46,9 @@
int selection = [cocoaTabFrame indexOfTabViewItem:self];
if(selection >= 0) {
if(auto item = tabFrame->item(selection)) {
if(item->state.image) {
if(item->state.icon) {
uint iconSize = hiro::pFont::size(tabFrame->font(true), " ").height();
NSImage* image = NSMakeImage(item->state.image);
NSImage* image = NSMakeImage(item->state.icon);
[[NSGraphicsContext currentContext] saveGraphicsState];
NSRect targetRect = NSMakeRect(tabRect.origin.x, tabRect.origin.y + 2, iconSize, iconSize);
@ -78,6 +78,7 @@ auto pTabFrame::construct() -> void {
auto pTabFrame::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -59,6 +59,7 @@ auto pTextEdit::construct() -> void {
auto pTextEdit::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -66,6 +66,7 @@ auto pVerticalScrollBar::construct() -> void {
auto pVerticalScrollBar::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -34,6 +34,7 @@ auto pVerticalSlider::construct() -> void {
auto pVerticalSlider::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -48,6 +48,7 @@ auto pViewport::construct() -> void {
auto pViewport::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}

View File

@ -21,18 +21,11 @@ auto pWidget::construct() -> void {
auto pWidget::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
/*
bool pWidget::enabled() {
@autoreleasepool {
return [cocoaView respondsToSelector:@selector(enabled)] && [cocoaView enabled];
}
}
*/
auto pWidget::focused() const -> bool {
@autoreleasepool {
return cocoaView == [[cocoaView window] firstResponder];
@ -80,6 +73,14 @@ auto pWidget::setVisible(bool visible) -> void {
}
}
/*
bool pWidget::enabled() {
@autoreleasepool {
return [cocoaView respondsToSelector:@selector(enabled)] && [cocoaView enabled];
}
}
*/
}
#endif

View File

@ -337,7 +337,9 @@ auto pWindow::sizeEvent() -> void {
auto pWindow::statusBarHeight() -> uint {
if(auto& statusBar = state().statusBar) {
return pFont::size(statusBar->font(true), " ").height() + 6;
if(statusBar->visible()) {
return pFont::size(statusBar->font(true), " ").height() + 6;
}
}
return 0;
}

View File

@ -17,7 +17,6 @@
#define Hiro_Size
#define Hiro_Geometry
#define Hiro_Font
#define Hiro_Image
#define Hiro_Application
#define Hiro_Desktop

View File

@ -10,8 +10,8 @@ auto mMenuItem::doActivate() const -> void {
if(state.onActivate) return state.onActivate();
}
auto mMenuItem::image() const -> Image {
return state.image;
auto mMenuItem::icon() const -> image {
return state.icon;
}
auto mMenuItem::onActivate(const function<void ()>& callback) -> type& {
@ -19,9 +19,9 @@ auto mMenuItem::onActivate(const function<void ()>& callback) -> type& {
return *this;
}
auto mMenuItem::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mMenuItem::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -33,8 +33,8 @@ auto mMenu::append(sAction action) -> type& {
return *this;
}
auto mMenu::image() const -> Image {
return state.image;
auto mMenu::icon() const -> image {
return state.icon;
}
auto mMenu::remove(sAction action) -> type& {
@ -52,9 +52,9 @@ auto mMenu::reset() -> type& {
return *this;
}
auto mMenu::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mMenu::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -39,7 +39,6 @@ namespace hiro {
#include "size.cpp"
#include "geometry.cpp"
#include "font.cpp"
#include "image.cpp"
#include "application.cpp"
#include "desktop.cpp"

View File

@ -14,6 +14,7 @@
#include <nall/vector.hpp>
using nall::function;
using nall::image;
using nall::lstring;
using nall::maybe;
using nall::nothing;
@ -327,36 +328,6 @@ struct Font {
};
#endif
#if defined(Hiro_Image)
struct Image {
using type = Image;
Image();
Image(const Image& source);
Image(const string& source);
Image(const vector<uint8_t>& source);
Image(const uint32_t* data, Size size);
~Image();
explicit operator bool() const;
auto operator=(const Image& source) -> type&;
auto data() const -> uint32_t*;
auto height() const -> signed;
auto reset() -> type&;
auto setImage(const uint32_t* data, Size size) -> type&;
auto setSize(Size size = {}) -> type&;
auto size() const -> Size;
auto width() const -> signed;
//private:
struct State {
uint32_t* data = nullptr;
Size size;
} state;
};
#endif
#if defined(Hiro_Hotkey)
struct Hotkey {
using type = Hotkey;
@ -837,10 +808,10 @@ struct mMenu : mAction {
auto actionCount() const -> unsigned;
auto actions() const -> vector<Action>;
auto append(sAction action) -> type&;
auto image() const -> Image;
auto icon() const -> image;
auto remove(sAction action) -> type&;
auto reset() -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setParent(mObject* parent = nullptr, signed offset = -1) -> type& override;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
@ -848,7 +819,7 @@ struct mMenu : mAction {
//private:
struct State {
vector<sAction> actions;
Image image;
image icon;
string text;
} state;
@ -871,15 +842,15 @@ struct mMenuItem : mAction {
Declare(MenuItem)
auto doActivate() const -> void;
auto image() const -> Image;
auto icon() const -> image;
auto onActivate(const function<void ()>& callback = {}) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
//private:
struct State {
Image image;
image icon;
function<void ()> onActivate;
string text;
} state;
@ -987,11 +958,11 @@ struct mButton : mWidget {
auto bordered() const -> bool;
auto doActivate() const -> void;
auto image() const -> Image;
auto icon() const -> image;
auto onActivate(const function<void ()>& callback = {}) -> type&;
auto orientation() const -> Orientation;
auto setBordered(bool bordered = true) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
@ -999,7 +970,7 @@ struct mButton : mWidget {
//private:
struct State {
bool bordered = true;
Image image;
image icon;
function<void ()> onActivate;
Orientation orientation = Orientation::Horizontal;
string text;
@ -1020,7 +991,7 @@ struct mCanvas : mWidget {
auto doMousePress(Mouse::Button button) const -> void;
auto doMouseRelease(Mouse::Button button) const -> void;
auto gradient() const -> Gradient;
auto image() const -> Image;
auto icon() const -> image;
auto onDrop(const function<void (lstring)>& callback = {}) -> type&;
auto onMouseLeave(const function<void ()>& callback = {}) -> type&;
auto onMouseMove(const function<void (Position)>& callback = {}) -> type&;
@ -1029,7 +1000,7 @@ struct mCanvas : mWidget {
auto setColor(Color color = {}) -> type&;
auto setDroppable(bool droppable = true) -> type&;
auto setGradient(Gradient gradient = {}) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setSize(Size size = {}) -> type&;
auto size() const -> Size;
auto update() -> type&;
@ -1039,7 +1010,7 @@ struct mCanvas : mWidget {
Color color;
bool droppable = false;
Gradient gradient;
Image image;
image icon;
function<void (lstring)> onDrop;
function<void ()> onMouseLeave;
function<void (Position)> onMouseMove;
@ -1056,12 +1027,12 @@ struct mCheckButton : mWidget {
auto bordered() const -> bool;
auto checked() const -> bool;
auto doToggle() const -> void;
auto image() const -> Image;
auto icon() const -> image;
auto onToggle(const function<void ()>& callback = {}) -> type&;
auto orientation() const -> Orientation;
auto setBordered(bool bordered = true) -> type&;
auto setChecked(bool checked = true) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
@ -1070,7 +1041,7 @@ struct mCheckButton : mWidget {
struct State {
bool bordered = true;
bool checked = false;
Image image;
image icon;
function<void ()> onToggle;
Orientation orientation = Orientation::Horizontal;
string text;
@ -1128,17 +1099,17 @@ struct mComboButton : mWidget {
struct mComboButtonItem : mObject {
Declare(ComboButtonItem)
auto image() const -> Image;
auto icon() const -> image;
auto remove() -> type& override;
auto selected() const -> bool;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setSelected() -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
//private:
struct State {
Image image;
image icon;
bool selected = false;
string text;
} state;
@ -1322,17 +1293,17 @@ struct mIconView : mWidget {
struct mIconViewItem : mObject {
Declare(IconViewItem)
auto image() const -> Image;
auto icon() const -> image;
auto remove() -> type& override;
auto selected() const -> bool;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setSelected(bool selected = true) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
//private:
struct State {
Image image;
image icon;
bool selected = false;
string text;
} state;
@ -1478,7 +1449,7 @@ struct mListViewColumn : mObject {
auto expandable() const -> bool;
auto foregroundColor() const -> Color;
auto horizontalAlignment() const -> double;
auto image() const -> Image;
auto icon() const -> image;
auto remove() -> type& override;
auto resizable() const -> bool;
auto setActive() -> type&;
@ -1488,7 +1459,7 @@ struct mListViewColumn : mObject {
auto setExpandable(bool expandable = true) -> type&;
auto setForegroundColor(Color color = {}) -> type&;
auto setHorizontalAlignment(double alignment = 0.0) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setResizable(bool resizable = true) -> type&;
auto setSortable(bool sortable = true) -> type&;
auto setText(const string& text = "") -> type&;
@ -1508,7 +1479,7 @@ struct mListViewColumn : mObject {
bool expandable = false;
Color foregroundColor;
double horizontalAlignment = 0.0;
Image image;
image icon;
bool resizable = true;
bool sortable = false;
string text;
@ -1561,13 +1532,13 @@ struct mListViewCell : mObject {
auto checked() const -> bool;
auto font(bool recursive = false) const -> Font;
auto foregroundColor(bool recursive = false) const -> Color;
auto image() const -> Image;
auto icon() const -> image;
auto setAlignment(Alignment alignment = {}) -> type&;
auto setBackgroundColor(Color color = {}) -> type&;
auto setCheckable(bool checkable = true) -> type&;
auto setChecked(bool checked = true) -> type&;
auto setForegroundColor(Color color = {}) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
@ -1578,7 +1549,7 @@ struct mListViewCell : mObject {
bool checkable = false;
bool checked = false;
Color foregroundColor;
Image image;
image icon;
string text;
} state;
};
@ -1606,13 +1577,13 @@ struct mRadioButton : mWidget {
auto checked() const -> bool;
auto doActivate() const -> void;
auto group() const -> Group override;
auto image() const -> Image;
auto icon() const -> image;
auto onActivate(const function<void ()>& callback = {}) -> type&;
auto orientation() const -> Orientation;
auto setBordered(bool bordered = true) -> type&;
auto setChecked() -> type&;
auto setGroup(sGroup group = {}) -> type& override;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&;
auto setText(const string& text = "") -> type&;
auto text() const -> string;
@ -1622,7 +1593,7 @@ struct mRadioButton : mWidget {
bool bordered = true;
bool checked = false;
sGroup group;
Image image;
image icon;
function<void ()> onActivate;
Orientation orientation = Orientation::Horizontal;
string text;
@ -1718,7 +1689,7 @@ struct mTabFrameItem : mObject {
auto append(sLayout layout) -> type&;
auto closable() const -> bool;
auto image() const -> Image;
auto icon() const -> image;
auto layout() const -> Layout;
auto movable() const -> bool;
auto remove() -> type& override;
@ -1726,7 +1697,7 @@ struct mTabFrameItem : mObject {
auto reset() -> type&;
auto selected() const -> bool;
auto setClosable(bool closable = true) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setMovable(bool movable = true) -> type&;
auto setParent(mObject* object = nullptr, signed offset = -1) -> type& override;
auto setSelected() -> type&;
@ -1736,7 +1707,7 @@ struct mTabFrameItem : mObject {
//private:
struct State {
bool closable = false;
Image image;
image icon;
sLayout layout;
bool movable = false;
bool selected = false;
@ -1833,7 +1804,7 @@ struct mTreeViewItem : mObject {
auto checkable() const -> bool;
auto checked() const -> bool;
auto foregroundColor(bool recursive = false) const -> Color;
auto image() const -> Image;
auto icon() const -> image;
auto item(const string& path) const -> TreeViewItem;
auto itemCount() const -> unsigned;
auto items() const -> vector<TreeViewItem>;
@ -1847,7 +1818,7 @@ struct mTreeViewItem : mObject {
auto setExpanded(bool expanded = true) -> type&;
auto setFocused() -> type& override;
auto setForegroundColor(Color color = {}) -> type&;
auto setImage(const Image& image = {}) -> type&;
auto setIcon(const image& icon = {}) -> type&;
auto setParent(mObject* parent = nullptr, signed offset = -1) -> type&;
auto setSelected() -> type&;
auto setText(const string& text = "") -> type&;
@ -1859,7 +1830,7 @@ struct mTreeViewItem : mObject {
bool checkable = false;
bool checked = false;
Color foregroundColor;
Image image;
image icon;
vector<sTreeViewItem> items;
string text;
} state;

View File

@ -1,83 +0,0 @@
#if defined(Hiro_Image)
Image::Image() {
}
Image::Image(const Image& source) {
operator=(source);
}
Image::Image(const string& source) {
nall::image image{source};
image.transform();
setImage((const uint32_t*)image.data(), Size{(signed)image.width(), (signed)image.height()});
}
Image::Image(const vector<uint8_t>& source) {
nall::image image{source};
image.transform();
setImage((const uint32_t*)image.data(), Size{(signed)image.width(), (signed)image.height()});
}
Image::Image(const uint32_t* data, Size size) {
setImage(data, size);
}
Image::~Image() {
reset();
}
Image::operator bool() const {
return state.data;
}
auto Image::operator=(const Image& source) -> type& {
reset();
if(state.size = source.state.size) {
state.data = new uint32_t[state.size.width() * state.size.height()];
memory::copy(state.data, source.state.data, state.size.width() * state.size.height() * sizeof(uint32_t));
}
return *this;
}
auto Image::data() const -> uint32_t* {
return state.data;
}
auto Image::height() const -> signed {
return state.size.height();
}
auto Image::reset() -> type& {
if(state.data) delete[] state.data;
state.data = nullptr;
state.size = {};
return *this;
}
auto Image::setImage(const uint32_t* data, Size size) -> type& {
reset();
if(data && size) {
state.size = size;
state.data = new uint32_t[size.width() * size.height()];
memory::copy(state.data, data, size.width() * size.height() * sizeof(uint32_t));
}
return *this;
}
auto Image::setSize(Size size) -> type& {
state.size = size;
if(state.data) delete[] state.data;
if(state.size) state.data = new uint32_t[size.width() * size.height()];
return *this;
}
auto Image::size() const -> Size {
return state.size;
}
auto Image::width() const -> signed {
return state.size.width();
}
#endif

View File

@ -128,10 +128,10 @@ struct Menu : sMenu {
auto actionCount() const { return self().actionCount(); }
auto actions() const { return self().actions(); }
auto append(sAction action) { return self().append(action), *this; }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto remove(sAction action) { return self().remove(action), *this; }
auto reset() { return self().reset(), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
};
@ -150,9 +150,9 @@ struct MenuItem : sMenuItem {
using internalType = mMenuItem;
auto doActivate() const { return self().doActivate(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto onActivate(const function<void ()>& callback = {}) { return self().onActivate(callback), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
};
@ -215,11 +215,11 @@ struct Button : sButton {
auto bordered() const { return self().bordered(); }
auto doActivate() const { return self().doActivate(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto onActivate(const function<void ()>& callback = {}) { return self().onActivate(callback), *this; }
auto orientation() const { return self().orientation(); }
auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
@ -240,7 +240,7 @@ struct Canvas : sCanvas {
auto doMousePress(Mouse::Button button) const { return self().doMousePress(button); }
auto doMouseRelease(Mouse::Button button) const { return self().doMouseRelease(button); }
auto gradient() const { return self().gradient(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto onDrop(const function<void (lstring)>& callback = {}) { return self().onDrop(callback), *this; }
auto onMouseLeave(const function<void ()>& callback = {}) { return self().onMouseLeave(callback), *this; }
auto onMouseMove(const function<void (Position)>& callback = {}) { return self().onMouseMove(callback), *this; }
@ -249,7 +249,7 @@ struct Canvas : sCanvas {
auto setColor(Color color) { return self().setColor(color), *this; }
auto setDroppable(bool droppable = true) { return self().setDroppable(droppable), *this; }
auto setGradient(Gradient gradient = {}) { return self().setGradient(gradient), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setSize(Size size = {}) { return self().setSize(size), *this; }
auto update() { return self().update(), *this; }
};
@ -263,12 +263,12 @@ struct CheckButton : sCheckButton {
auto bordered() const { return self().bordered(); }
auto checked() const { return self().checked(); }
auto doToggle() const { return self().doToggle(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto onToggle(const function<void ()>& callback = {}) { return self().onToggle(callback), *this; }
auto orientation() const { return self().orientation(); }
auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; }
auto setChecked(bool checked = true) { return self().setChecked(checked), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
@ -294,9 +294,9 @@ struct ComboButtonItem : sComboButtonItem {
DeclareSharedObject(ComboButtonItem)
using internalType = mComboButtonItem;
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto selected() const { return self().selected(); }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setSelected() { return self().setSelected(), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
@ -411,9 +411,9 @@ struct IconViewItem : sIconViewItem {
DeclareSharedObject(IconViewItem)
using internalType = mIconViewItem;
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto selected() const { return self().selected(); }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setSelected(bool selected = true) { return self().setSelected(selected), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
@ -497,7 +497,7 @@ struct ListViewColumn : sListViewColumn {
auto expandable() const { return self().expandable(); }
auto foregroundColor() const { return self().foregroundColor(); }
auto horizontalAlignment() const { return self().horizontalAlignment(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto resizable() const { return self().resizable(); }
auto setActive() { return self().setActive(), *this; }
auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; }
@ -505,7 +505,7 @@ struct ListViewColumn : sListViewColumn {
auto setEditable(bool editable = true) { return self().setEditable(editable), *this; }
auto setExpandable(bool expandable = true) { return self().setExpandable(expandable), *this; }
auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setResizable(bool resizable = true) { return self().setResizable(resizable), *this; }
auto setSortable(bool sortable = true) { return self().setSortable(sortable), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
@ -540,13 +540,13 @@ struct ListViewCell : sListViewCell {
auto checkable() const { return self().checkable(); }
auto checked() const { return self().checked(); }
auto foregroundColor() const { return self().foregroundColor(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; }
auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; }
auto setCheckable(bool checkable = true) const { return self().setCheckable(checkable), *this; }
auto setChecked(bool checked = true) const { return self().setChecked(checked), *this; }
auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
};
@ -634,12 +634,12 @@ struct RadioButton : sRadioButton {
auto checked() const { return self().checked(); }
auto doActivate() const { return self().doActivate(); }
auto group() const { return self().group(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto onActivate(const function<void ()>& callback = {}) { return self().onActivate(callback), *this; }
auto orientation() const { return self().orientation(); }
auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; }
auto setChecked() { return self().setChecked(), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }
@ -684,14 +684,14 @@ struct TabFrameItem : sTabFrameItem {
auto append(sLayout layout) { return self().append(layout), *this; }
auto closable() const { return self().closable(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto layout() const { return self().layout(); }
auto movable() const { return self().movable(); }
auto remove(sLayout layout) { return self().remove(layout), *this; }
auto reset() { return self().reset(), *this; }
auto selected() const { return self().selected(); }
auto setClosable(bool closable = true) { return self().setClosable(closable), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setMovable(bool movable = true) { return self().setMovable(movable), *this; }
auto setSelected() { return self().setSelected(), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
@ -756,7 +756,7 @@ struct TreeViewItem : sTreeViewItem {
auto checkable() const { return self().checkable(); }
auto checked() const { return self().checked(); }
auto foregroundColor() const { return self().foregroundColor(); }
auto image() const { return self().image(); }
auto icon() const { return self().icon(); }
auto item(const string& path) const { return self().item(path); }
auto itemCount() const { return self().itemCount(); }
auto items() const { return self().items(); }
@ -768,7 +768,7 @@ struct TreeViewItem : sTreeViewItem {
auto setChecked(bool checked = true) { return self().setChecked(checked), *this; }
auto setExpanded(bool expanded = true) { return self().setExpanded(expanded), *this; }
auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; }
auto setImage(const Image& image = {}) { return self().setImage(image), *this; }
auto setIcon(const image& icon = {}) { return self().setIcon(icon), *this; }
auto setSelected() { return self().setSelected(), *this; }
auto setText(const string& text = "") { return self().setText(text), *this; }
auto text() const { return self().text(); }

View File

@ -14,8 +14,8 @@ auto mButton::doActivate() const -> void {
if(state.onActivate) return state.onActivate();
}
auto mButton::image() const -> Image {
return state.image;
auto mButton::icon() const -> image {
return state.icon;
}
auto mButton::onActivate(const function<void ()>& callback) -> type& {
@ -33,9 +33,9 @@ auto mButton::setBordered(bool bordered) -> type& {
return *this;
}
auto mButton::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mButton::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -10,8 +10,8 @@ auto mCanvas::color() const -> Color {
return state.color;
}
auto mCanvas::data() -> uint32_t* {
return state.image.data();
auto mCanvas::data() -> uint32* {
return (uint32*)state.icon.data();
}
auto mCanvas::droppable() const -> bool {
@ -42,8 +42,8 @@ auto mCanvas::gradient() const -> Gradient {
return state.gradient;
}
auto mCanvas::image() const -> Image {
return state.image;
auto mCanvas::icon() const -> image {
return state.icon;
}
auto mCanvas::onDrop(const function<void (lstring)>& callback) -> type& {
@ -89,21 +89,20 @@ auto mCanvas::setGradient(Gradient gradient) -> type& {
return *this;
}
auto mCanvas::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mCanvas::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}
auto mCanvas::setSize(Size size) -> type& {
Image image;
image.setSize(size);
memory::fill(image.data(), size.width() * size.height() * sizeof(uint32_t), 0x00);
return setImage(image);
image icon;
icon.allocate(size.width(), size.height());
return setIcon(icon);
}
auto mCanvas::size() const -> Size {
return state.image.size();
return {(int)state.icon.width(), (int)state.icon.height()};
}
auto mCanvas::update() -> type& {

View File

@ -18,8 +18,8 @@ auto mCheckButton::doToggle() const -> void {
if(state.onToggle) return state.onToggle();
}
auto mCheckButton::image() const -> Image {
return state.image;
auto mCheckButton::icon() const -> image {
return state.icon;
}
auto mCheckButton::onToggle(const function<void ()>& callback) -> type& {
@ -43,9 +43,9 @@ auto mCheckButton::setChecked(bool checked) -> type& {
return *this;
}
auto mCheckButton::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mCheckButton::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -6,8 +6,8 @@ auto mComboButtonItem::allocate() -> pObject* {
//
auto mComboButtonItem::image() const -> Image {
return state.image;
auto mComboButtonItem::icon() const -> image {
return state.icon;
}
auto mComboButtonItem::remove() -> type& {
@ -19,9 +19,9 @@ auto mComboButtonItem::selected() const -> bool {
return state.selected;
}
auto mComboButtonItem::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mComboButtonItem::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -6,8 +6,8 @@ auto mIconViewItem::allocate() -> pObject* {
//
auto mIconViewItem::image() const -> Image {
return state.image;
auto mIconViewItem::icon() const -> image {
return state.icon;
}
auto mIconViewItem::remove() -> type& {
@ -19,9 +19,9 @@ auto mIconViewItem::selected() const -> bool {
return state.selected;
}
auto mIconViewItem::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mIconViewItem::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -94,8 +94,8 @@ auto mListViewCell::foregroundColor(bool recursive) const -> Color {
return state.foregroundColor;
}
auto mListViewCell::image() const -> Image {
return state.image;
auto mListViewCell::icon() const -> image {
return state.icon;
}
auto mListViewCell::setAlignment(Alignment alignment) -> type& {
@ -129,9 +129,9 @@ auto mListViewCell::setForegroundColor(Color color) -> type& {
return *this;
}
auto mListViewCell::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mListViewCell::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -35,8 +35,8 @@ auto mListViewColumn::horizontalAlignment() const -> double {
return state.horizontalAlignment;
}
auto mListViewColumn::image() const -> Image {
return state.image;
auto mListViewColumn::icon() const -> image {
return state.icon;
}
auto mListViewColumn::remove() -> type& {
@ -91,9 +91,9 @@ auto mListViewColumn::setHorizontalAlignment(double alignment) -> type& {
return *this;
}
auto mListViewColumn::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mListViewColumn::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -22,8 +22,8 @@ auto mRadioButton::group() const -> Group {
return state.group;
}
auto mRadioButton::image() const -> Image {
return state.image;
auto mRadioButton::icon() const -> image {
return state.icon;
}
auto mRadioButton::onActivate(const function<void ()>& callback) -> type& {
@ -62,9 +62,9 @@ auto mRadioButton::setGroup(sGroup group) -> type& {
return *this;
}
auto mRadioButton::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mRadioButton::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -23,8 +23,8 @@ auto mTabFrameItem::closable() const -> bool {
return state.closable;
}
auto mTabFrameItem::image() const -> Image {
return state.image;
auto mTabFrameItem::icon() const -> image {
return state.icon;
}
auto mTabFrameItem::layout() const -> Layout {
@ -62,9 +62,9 @@ auto mTabFrameItem::setClosable(bool closable) -> type& {
return *this;
}
auto mTabFrameItem::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mTabFrameItem::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -52,8 +52,8 @@ auto mTreeViewItem::foregroundColor(bool recursive) const -> Color {
return {};
}
auto mTreeViewItem::image() const -> Image {
return state.image;
auto mTreeViewItem::icon() const -> image {
return state.icon;
}
auto mTreeViewItem::item(const string& path) const -> TreeViewItem {
@ -137,9 +137,9 @@ auto mTreeViewItem::setForegroundColor(Color color) -> type& {
return *this;
}
auto mTreeViewItem::setImage(const Image& image) -> type& {
state.image = image;
signal(setImage, image);
auto mTreeViewItem::setIcon(const image& icon) -> type& {
state.icon = icon;
signal(setIcon, icon);
return *this;
}

View File

@ -118,9 +118,9 @@ auto BrowserDialogWindow::run() -> lstring {
layout.setMargin(5);
pathName.onActivate([&] { setPath(pathName.text()); });
pathRefresh.setBordered(false).setImage(Icon::Action::Refresh).onActivate([&] { setPath(state.path); });
pathHome.setBordered(false).setImage(Icon::Go::Home).onActivate([&] { setPath(userpath()); });
pathUp.setBordered(false).setImage(Icon::Go::Up).onActivate([&] { setPath(dirname(state.path)); });
pathRefresh.setBordered(false).setIcon(Icon::Action::Refresh).onActivate([&] { setPath(state.path); });
pathHome.setBordered(false).setIcon(Icon::Go::Home).onActivate([&] { setPath(userpath()); });
pathUp.setBordered(false).setIcon(Icon::Go::Up).onActivate([&] { setPath(dirname(state.path)); });
view.setBatchable(state.action == "openFiles").onActivate([&] { activate(); }).onChange([&] { change(); });
filterList.setVisible(state.action != "selectFolder").onChange([&] { setPath(state.path); });
for(auto& filter : state.filters) {
@ -175,7 +175,7 @@ auto BrowserDialogWindow::setPath(string path) -> void {
if(folderMode && isMatch(content)) continue;
view.append(ListViewItem()
.append(ListViewCell().setText(content).setImage(Icon::Emblem::Folder))
.append(ListViewCell().setText(content).setIcon(Icon::Emblem::Folder))
);
}
@ -185,7 +185,7 @@ auto BrowserDialogWindow::setPath(string path) -> void {
if(!isMatch(content)) continue;
view.append(ListViewItem()
.append(ListViewCell().setText(content).setImage(folderMode ? Icon::Action::Open : Icon::Emblem::File))
.append(ListViewCell().setText(content).setIcon(folderMode ? Icon::Action::Open : Icon::Emblem::File))
);
}

View File

@ -6,19 +6,19 @@ MessageDialog::MessageDialog(const string& text) {
auto MessageDialog::error(const lstring& buttons) -> string {
state.buttons = buttons;
state.image = Icon::Prompt::Error;
state.icon = Icon::Prompt::Error;
return _run();
}
auto MessageDialog::information(const lstring& buttons) -> string {
state.buttons = buttons;
state.image = Icon::Prompt::Information;
state.icon = Icon::Prompt::Information;
return _run();
}
auto MessageDialog::question(const lstring& buttons) -> string {
state.buttons = buttons;
state.image = Icon::Prompt::Question;
state.icon = Icon::Prompt::Question;
return _run();
}
@ -39,7 +39,7 @@ auto MessageDialog::setTitle(const string& title) -> type& {
auto MessageDialog::warning(const lstring& buttons) -> string {
state.buttons = buttons;
state.image = Icon::Prompt::Warning;
state.icon = Icon::Prompt::Warning;
return _run();
}
@ -53,7 +53,7 @@ auto MessageDialog::_run() -> string {
Widget controlSpacer{&controlLayout, Size{~0, 0}};
layout.setMargin(5);
messageIcon.setImage(state.image);
messageIcon.setIcon(state.icon);
messageText.setText(state.text);
for(auto n : range(state.buttons)) {
Button button{&controlLayout, Size{80, 0}, 5};

View File

@ -15,7 +15,7 @@ struct MessageDialog {
private:
struct State {
lstring buttons;
vector<uint8_t> image;
vector<uint8> icon;
sWindow parent;
string response;
string text;

View File

@ -9,7 +9,7 @@ static auto MenuItem_activate(GtkMenuItem*, pMenuItem* p) -> void {
auto pMenuItem::construct() -> void {
widget = gtk_image_menu_item_new_with_mnemonic("");
g_signal_connect(G_OBJECT(widget), "activate", G_CALLBACK(MenuItem_activate), (gpointer)this);
setImage(state().image);
setIcon(state().icon);
setText(state().text);
}
@ -17,9 +17,9 @@ auto pMenuItem::destruct() -> void {
if(widget) gtk_widget_destroy(widget), widget = nullptr;
}
auto pMenuItem::setImage(const Image& image) -> void {
if(image) {
GtkImage* gtkImage = CreateImage(image, true);
auto pMenuItem::setIcon(const image& icon) -> void {
if(icon) {
GtkImage* gtkImage = CreateImage(icon, true);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), (GtkWidget*)gtkImage);
} else {
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), nullptr);

View File

@ -5,7 +5,7 @@ namespace hiro {
struct pMenuItem : pAction {
Declare(MenuItem, Action)
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
};

View File

@ -6,7 +6,7 @@ auto pMenu::construct() -> void {
gtkMenu = gtk_menu_new();
widget = gtk_image_menu_item_new_with_mnemonic("");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget), gtkMenu);
setImage(state().image);
setIcon(state().icon);
setText(state().text);
for(auto& action : state().actions) append(*action);
@ -35,9 +35,9 @@ auto pMenu::setFont(const Font& font) -> void {
}
}
auto pMenu::setImage(const Image& image) -> void {
if(image) {
GtkImage* gtkImage = CreateImage(image, true);
auto pMenu::setIcon(const image& icon) -> void {
if(icon) {
GtkImage* gtkImage = CreateImage(icon, true);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), (GtkWidget*)gtkImage);
} else {
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), nullptr);

View File

@ -8,7 +8,7 @@ struct pMenu : pAction {
auto append(sAction action) -> void;
auto remove(sAction action) -> void;
auto setFont(const Font& font) -> void override;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
GtkWidget* gtkMenu = nullptr;

View File

@ -29,40 +29,11 @@ static auto CreatePixbuf(image icon, bool scale = false) -> GdkPixbuf* {
return pixbuf;
}
static auto CreatePixbuf(const Image& image, bool scale = false) -> GdkPixbuf* {
if(!image.state.data) return nullptr;
auto pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, image.width(), image.height());
//ARGB -> ABGR conversion
const uint32_t* source = image.data();
uint32_t* target = (uint32_t*)gdk_pixbuf_get_pixels(pixbuf);
for(auto n : range(image.width() * image.height())) {
uint32_t pixel = *source++;
*target++ = (pixel & 0x00ff0000) >> 16 | (pixel & 0xff00ff00) | (pixel & 0x000000ff) << 16;
}
if(scale) {
auto scaled = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR);
g_object_unref(pixbuf);
pixbuf = scaled;
}
return pixbuf;
}
static auto CreateImage(const nall::image& image, bool scale = false) -> GtkImage* {
auto pixbuf = CreatePixbuf(image, scale);
auto gtkImage = (GtkImage*)gtk_image_new_from_pixbuf(pixbuf);
static auto CreateImage(const image& icon, bool scale = false) -> GtkImage* {
auto pixbuf = CreatePixbuf(icon, scale);
auto gtkIcon = (GtkImage*)gtk_image_new_from_pixbuf(pixbuf);
g_object_unref(pixbuf);
return gtkImage;
}
static auto CreateImage(const Image& image, bool scale = false) -> GtkImage* {
auto pixbuf = CreatePixbuf(image, scale);
auto gtkImage = (GtkImage*)gtk_image_new_from_pixbuf(pixbuf);
g_object_unref(pixbuf);
return gtkImage;
return gtkIcon;
}
static auto DropPaths(GtkSelectionData* data) -> lstring {

View File

@ -9,7 +9,7 @@ auto pButton::construct() -> void {
gtkButton = GTK_BUTTON(gtkWidget);
setBordered(state().bordered);
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
@ -26,13 +26,13 @@ auto pButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + (state().text ? 24 : 12), size.height() + 12};
@ -42,9 +42,9 @@ auto pButton::setBordered(bool bordered) -> void {
gtk_button_set_relief(gtkButton, bordered ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE);
}
auto pButton::setImage(const Image& image) -> void {
if(image) {
auto gtkImage = CreateImage(image);
auto pButton::setIcon(const image& icon) -> void {
if(icon) {
auto gtkImage = CreateImage(icon);
gtk_button_set_image(gtkButton, (GtkWidget*)gtkImage);
} else {
gtk_button_set_image(gtkButton, nullptr);

View File

@ -7,7 +7,7 @@ struct pButton : pWidget {
auto minimumSize() const -> Size override;
auto setBordered(bool bordered) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;

View File

@ -73,7 +73,7 @@ auto pCanvas::destruct() -> void {
}
auto pCanvas::minimumSize() const -> Size {
if(auto& image = state().image) return image.size();
if(auto& icon = state().icon) return {(int)icon.width(), (int)icon.height()};
return {0, 0};
}
@ -97,7 +97,7 @@ auto pCanvas::setGradient(Gradient gradient) -> void {
update();
}
auto pCanvas::setImage(const Image& image) -> void {
auto pCanvas::setIcon(const image& icon) -> void {
update();
}
@ -109,9 +109,9 @@ auto pCanvas::update() -> void {
auto pCanvas::_onExpose(GdkEventExpose* expose) -> void {
if(surface == nullptr) return;
signed sx = 0, sy = 0, dx = 0, dy = 0;
signed width = surfaceWidth;
signed height = surfaceHeight;
int sx = 0, sy = 0, dx = 0, dy = 0;
int width = surfaceWidth;
int height = surfaceHeight;
auto geometry = pSizable::state().geometry;
if(width <= geometry.width()) {
@ -136,12 +136,12 @@ auto pCanvas::_onExpose(GdkEventExpose* expose) -> void {
}
auto pCanvas::_rasterize() -> void {
signed width = 0;
signed height = 0;
int width = 0;
int height = 0;
if(auto& image = state().image) {
width = image.width();
height = image.height();
if(auto& icon = state().icon) {
width = icon.width();
height = icon.height();
} else {
width = pSizable::state().geometry.width();
height = pSizable::state().geometry.height();
@ -155,22 +155,22 @@ auto pCanvas::_rasterize() -> void {
if(!surface) surface = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, width, height);
auto buffer = (uint32_t*)gdk_pixbuf_get_pixels(surface);
if(auto& image = state().image) {
memory::copy(buffer, state().image.data(), width * height * sizeof(uint32_t));
if(auto& icon = state().icon) {
memory::copy(buffer, state().icon.data(), width * height * sizeof(uint32));
} else if(auto& gradient = state().gradient) {
auto& colors = gradient.state.colors;
nall::image fill;
image fill;
fill.allocate(width, height);
fill.gradient(colors[0].value(), colors[1].value(), colors[2].value(), colors[3].value());
memory::copy(buffer, fill.data(), fill.size());
} else {
uint32_t color = state().color.value();
uint32 color = state().color.value();
for(auto n : range(width * height)) buffer[n] = color;
}
//ARGB -> ABGR conversion
for(auto n : range(width * height)) {
uint32_t color = *buffer;
uint32 color = *buffer;
color = (color & 0xff00ff00) | ((color & 0xff0000) >> 16) | ((color & 0x0000ff) << 16);
*buffer++ = color;
}

View File

@ -10,7 +10,7 @@ struct pCanvas : pWidget {
auto setDroppable(bool droppable) -> void;
auto setGeometry(Geometry geometry) -> void override;
auto setGradient(Gradient gradient) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto update() -> void;
auto _onExpose(GdkEventExpose* event) -> void;
@ -19,8 +19,8 @@ struct pCanvas : pWidget {
auto _release() -> void;
GdkPixbuf* surface = nullptr;
unsigned surfaceWidth = 0;
unsigned surfaceHeight = 0;
uint surfaceWidth = 0;
uint surfaceHeight = 0;
};
}

View File

@ -12,7 +12,7 @@ auto pCheckButton::construct() -> void {
setBordered(state().bordered);
setChecked(state().checked);
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
@ -29,13 +29,13 @@ auto pCheckButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + 24, size.height() + 12};
@ -51,9 +51,9 @@ auto pCheckButton::setChecked(bool checked) -> void {
unlock();
}
auto pCheckButton::setImage(const Image& image) -> void {
if(image) {
GtkImage* gtkImage = CreateImage(image);
auto pCheckButton::setIcon(const image& icon) -> void {
if(icon) {
GtkImage* gtkImage = CreateImage(icon);
gtk_button_set_image(GTK_BUTTON(gtkWidget), (GtkWidget*)gtkImage);
} else {
gtk_button_set_image(GTK_BUTTON(gtkWidget), nullptr);

View File

@ -8,7 +8,7 @@ struct pCheckButton : pWidget {
auto minimumSize() const -> Size override;
auto setBordered(bool bordered) -> void;
auto setChecked(bool checked) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;
};

View File

@ -8,10 +8,10 @@ auto pComboButtonItem::construct() -> void {
auto pComboButtonItem::destruct() -> void {
}
auto pComboButtonItem::setImage(const Image& image) -> void {
auto pComboButtonItem::setIcon(const image& icon) -> void {
if(auto parent = _parent()) {
auto size = pFont::size(self().font(true), " ").height();
auto pixbuf = CreatePixbuf(image, true);
auto pixbuf = CreatePixbuf(icon, true);
gtk_list_store_set(parent->gtkListStore, &gtkIter, 0, pixbuf, -1);
}
}

View File

@ -5,7 +5,7 @@ namespace hiro {
struct pComboButtonItem : pObject {
Declare(ComboButtonItem, Object)
auto setImage(const Image& icon) -> void;
auto setIcon(const image& icon) -> void;
auto setSelected() -> void;
auto setText(const string& text) -> void;

View File

@ -32,7 +32,7 @@ auto pComboButton::append(sComboButtonItem item) -> void {
lock();
if(auto self = item->self()) {
gtk_list_store_append(gtkListStore, &self->gtkIter);
self->setImage(item->state.image);
self->setIcon(item->state.icon);
if(item->state.selected) self->setSelected();
self->setText(item->state.text);
}
@ -45,7 +45,7 @@ auto pComboButton::minimumSize() const -> Size {
signed maximumWidth = 0;
for(auto& item : state().items) {
maximumWidth = max(maximumWidth,
(item->state.image ? pFont::size(font, " ").height() + 2 : 0)
(item->state.icon ? pFont::size(font, " ").height() + 2 : 0)
+ pFont::size(font, item->state.text).width()
);
}

View File

@ -8,9 +8,9 @@ auto pIconViewItem::construct() -> void {
auto pIconViewItem::destruct() -> void {
}
auto pIconViewItem::setImage(const Image& image) -> void {
auto pIconViewItem::setIcon(const image& icon) -> void {
if(auto parent = _parent()) {
parent->setItemImage(self().offset(), image);
parent->setItemIcon(self().offset(), icon);
}
}

View File

@ -5,7 +5,7 @@ namespace hiro {
struct pIconViewItem : pObject {
Declare(IconViewItem, Object)
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setSelected(bool selected) -> void;
auto setText(const string& text) -> void;

View File

@ -65,7 +65,7 @@ auto pIconView::destruct() -> void {
auto pIconView::append(sIconViewItem item) -> void {
GtkTreeIter iter;
gtk_list_store_append(store, &iter);
setItemImage(item->offset(), item->state.image);
setItemIcon(item->offset(), item->state.icon);
setItemSelected(item->offset(), item->state.selected);
setItemText(item->offset(), item->state.text);
}
@ -121,12 +121,12 @@ auto pIconView::setGeometry(Geometry geometry) -> void {
}
}
auto pIconView::setItemImage(unsigned position, const Image& image) -> void {
auto pIconView::setItemIcon(unsigned position, const image& icon) -> void {
if(position >= self().itemCount()) return;
GtkTreeIter iter;
if(gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, string{position})) {
if(image) {
GdkPixbuf* pixbuf = CreatePixbuf(image);
if(icon) {
GdkPixbuf* pixbuf = CreatePixbuf(icon);
gtk_list_store_set(store, &iter, 0, pixbuf, -1);
} else {
gtk_list_store_set(store, &iter, 0, nullptr, -1);

View File

@ -13,7 +13,7 @@ struct pIconView : pWidget {
auto setFlow(Orientation flow) -> void;
auto setForegroundColor(Color color) -> void;
auto setGeometry(Geometry geometry) -> void;
auto setItemImage(unsigned position, const Image& image) -> void;
auto setItemIcon(unsigned position, const image& icon) -> void;
auto setItemSelected(unsigned position, bool selected) -> void;
auto setItemSelected(const vector<signed>& selections) -> void;
auto setItemSelectedAll() -> void;

View File

@ -25,7 +25,7 @@ auto pListViewCell::setChecked(bool checked) -> void {
auto pListViewCell::setForegroundColor(Color color) -> void {
}
auto pListViewCell::setImage(const Image& image) -> void {
auto pListViewCell::setIcon(const image& icon) -> void {
_setState();
}
@ -50,7 +50,7 @@ auto pListViewCell::_setState() -> void {
if(auto grandparent = _grandparent()) {
grandparent->lock();
gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 0, state().checked, -1);
gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 1, CreatePixbuf(state().image), -1);
gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 1, CreatePixbuf(state().icon), -1);
gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 2, state().text.data(), -1);
grandparent->unlock();
}

View File

@ -10,7 +10,7 @@ struct pListViewCell : pObject {
auto setCheckable(bool checkable) -> void;
auto setChecked(bool checked) -> void;
auto setForegroundColor(Color color) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setText(const string& text) -> void;
auto _grandparent() -> maybe<pListView&>;

View File

@ -81,9 +81,9 @@ auto pListViewColumn::setFont(const Font& font) -> void {
auto pListViewColumn::setForegroundColor(Color color) -> void {
}
auto pListViewColumn::setImage(const Image& image) -> void {
if(image) {
gtk_image_set_from_pixbuf(GTK_IMAGE(gtkHeaderIcon), CreatePixbuf(image));
auto pListViewColumn::setIcon(const image& icon) -> void {
if(icon) {
gtk_image_set_from_pixbuf(GTK_IMAGE(gtkHeaderIcon), CreatePixbuf(icon));
} else {
gtk_image_clear(GTK_IMAGE(gtkHeaderIcon));
}

View File

@ -13,7 +13,7 @@ struct pListViewColumn : pObject {
auto setFont(const Font& font) -> void override;
auto setForegroundColor(Color color) -> void;
auto setHorizontalAlignment(double) -> void {}
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setResizable(bool resizable) -> void;
auto setSortable(bool sortable) -> void;
auto setText(const string& text) -> void;

View File

@ -155,8 +155,8 @@ auto pListView::_cellWidth(unsigned _row, unsigned _column) -> unsigned {
if(cell->state.checkable) {
width += 24;
}
if(auto& image = cell->state.image) {
width += image.width() + 2;
if(auto& icon = cell->state.icon) {
width += icon.width() + 2;
}
if(auto& text = cell->state.text) {
width += pFont::size(cell->font(true), text).width();
@ -170,8 +170,8 @@ auto pListView::_columnWidth(unsigned _column) -> unsigned {
unsigned width = 8;
if(auto& header = state().header) {
if(auto column = header->column(_column)) {
if(auto& image = column->state.image) {
width += image.width() + 2;
if(auto& icon = column->state.icon) {
width += icon.width() + 2;
}
if(auto& text = column->state.text) {
width += pFont::size(column->font(true), text).width();

View File

@ -13,7 +13,7 @@ auto pRadioButton::construct() -> void {
gtkWidget = gtk_toggle_button_new();
setBordered(state().bordered);
setImage(state().image);
setIcon(state().icon);
setOrientation(state().orientation);
setText(state().text);
@ -30,13 +30,13 @@ auto pRadioButton::minimumSize() const -> Size {
Size size = pFont::size(self().font(true), state().text);
if(state().orientation == Orientation::Horizontal) {
size.setWidth(size.width() + state().image.width());
size.setHeight(max(size.height(), state().image.height()));
size.setWidth(size.width() + state().icon.width());
size.setHeight(max(size.height(), state().icon.height()));
}
if(state().orientation == Orientation::Vertical) {
size.setWidth(max(size.width(), state().image.width()));
size.setHeight(size.height() + state().image.height());
size.setWidth(max(size.width(), state().icon.width()));
size.setHeight(size.height() + state().icon.height());
}
return {size.width() + 24, size.height() + 12};
@ -76,9 +76,9 @@ auto pRadioButton::setGroup(sGroup group) -> void {
}
}
auto pRadioButton::setImage(const Image& image) -> void {
if(image) {
GtkImage* gtkImage = CreateImage(image);
auto pRadioButton::setIcon(const image& icon) -> void {
if(icon) {
GtkImage* gtkImage = CreateImage(icon);
gtk_button_set_image(GTK_BUTTON(gtkWidget), (GtkWidget*)gtkImage);
} else {
gtk_button_set_image(GTK_BUTTON(gtkWidget), nullptr);

View File

@ -9,7 +9,7 @@ struct pRadioButton : pWidget {
auto setBordered(bool bordered) -> void;
auto setChecked() -> void;
auto setGroup(sGroup group) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setOrientation(Orientation orientation) -> void;
auto setText(const string& text) -> void;

View File

@ -22,9 +22,9 @@ auto pTabFrameItem::setClosable(bool closable) -> void {
}
}
auto pTabFrameItem::setImage(const Image& image) -> void {
auto pTabFrameItem::setIcon(const image& icon) -> void {
if(auto parent = _parent()) {
parent->setItemImage(self().offset(), image);
parent->setItemIcon(self().offset(), icon);
}
}

View File

@ -8,7 +8,7 @@ struct pTabFrameItem : pObject {
auto append(sLayout layout) -> void;
auto remove(sLayout layout) -> void;
auto setClosable(bool closable) -> void;
auto setImage(const Image& image) -> void;
auto setIcon(const image& icon) -> void;
auto setMovable(bool movable) -> void;
auto setSelected() -> void;
auto setText(const string& text) -> void;

View File

@ -178,7 +178,7 @@ auto pTabFrame::setItemClosable(unsigned position, bool closable) -> void {
_synchronizeTab(position);
}
auto pTabFrame::setItemImage(unsigned position, const Image& image) -> void {
auto pTabFrame::setItemIcon(unsigned position, const image& icon) -> void {
_synchronizeTab(position);
}
@ -239,15 +239,15 @@ auto pTabFrame::_synchronizeTab(unsigned position) -> void {
auto& item = state().items[position];
auto& tab = tabs[position];
gtk_widget_set_visible(tab.close, item->closable());
if(auto& image = item->state.image) {
unsigned size = pFont::size(self().font(true), " ").height();
auto pixbuf = CreatePixbuf(image, true);
if(auto& icon = item->state.icon) {
uint size = pFont::size(self().font(true), " ").height();
auto pixbuf = CreatePixbuf(icon, true);
gtk_image_set_from_pixbuf(GTK_IMAGE(tab.image), pixbuf);
} else {
gtk_image_clear(GTK_IMAGE(tab.image));
}
string text = {
item->state.image && item->state.text ? " " : "",
item->state.icon && item->state.text ? " " : "",
item->state.text,
item->state.text && item->state.closable ? " " : ""
};

View File

@ -12,7 +12,7 @@ struct pTabFrame : pWidget {
auto setFont(const Font& font) -> void override;
auto setGeometry(Geometry geometry) -> void override;
auto setItemClosable(unsigned position, bool closable) -> void;
auto setItemImage(unsigned position, const Image& image) -> void;
auto setItemIcon(unsigned position, const image& icon) -> void;
auto setItemLayout(unsigned position, sLayout layout) -> void;
auto setItemMovable(unsigned position, bool movable) -> void;
auto setItemSelected(unsigned position) -> void;

View File

@ -10,7 +10,7 @@ auto pTreeViewItem::construct() -> void {
gtk_tree_store_append(parentWidget->gtkTreeStore, &gtkIter, nullptr);
}
setChecked(state().checked);
setImage(state().image);
setIcon(state().icon);
setText(state().text);
}
}
@ -65,10 +65,10 @@ auto pTreeViewItem::setFocused() -> void {
auto pTreeViewItem::setForegroundColor(Color color) -> void {
}
auto pTreeViewItem::setImage(const Image& image) -> void {
auto pTreeViewItem::setIcon(const image& icon) -> void {
if(auto parentWidget = _parentWidget()) {
if(image) {
auto pixbuf = CreatePixbuf(image);
if(icon) {
auto pixbuf = CreatePixbuf(icon);
gtk_tree_store_set(parentWidget->gtkTreeStore, &gtkIter, 1, pixbuf, -1);
} else {
gtk_tree_store_set(parentWidget->gtkTreeStore, &gtkIter, 1, nullptr, -1);

Some files were not shown because too many files have changed in this diff Show More